本文共 2237 字,大约阅读时间需要 7 分钟。
在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因服务提供者
的不可用导致服务消费者
的不可用,并将不可用逐渐放大的过程。
如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。
官网地址:
官网宣布Hystrix已经停止更新并进入维护状态了,所以不建议使用了,替代方案:Spring Cloud Alibaba Sentinel
改造eureka-ribbon-client工程的代码,首先在pox.xml文件中加入spring-cloud-starter-netflix-hystrix的起步依赖:
org.springframework.cloud spring-cloud-starter-netflix-hystrix
在启动类中添加@EnableHystrix
注解开启Hystrix。
使用@HystrixCommand
注解创建熔断器的功能,并指定了fallbackMethod
熔断方法。
package com.yq.ribbon.controller;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;@RestControllerpublic class DemoController { @Autowired RestTemplate restTemplate; @GetMapping("/ribbon") @HystrixCommand(fallbackMethod = "error") public String demo() { return restTemplate.getForObject("http://eureka-client/hello", String.class); } // 服务降级方法要和原方法的参数列表一致 public String error() { return "sorry,error!"; }}
启动测试,然后断掉将要将费的服务。
由于 Feign 的起步依赖中已经 引入了 Hystrix 的依赖,所以在 Feign 中使用 Hystrix 不需要引入任何的依赖 。
Feign默认没有打开Hystrix功能,需要在配置文件中配置打开它。#开启hystrix断路器feign: hystrix: enabled: true
创建服务降级类FeignClientCallback
。
import org.springframework.stereotype.Component;// 此类中的方法专门用于服务降级,该类一般要实现调用远程服务的接口(这样保证方法名一致)@Componentpublic class FeignClientCallback implements FeignClientInter { // 服务降级的方法要和原方法一致(名称、参数列表) @Override public String sayHelloFromClient() { return "服务降级方法返回"; }}
在Feign客户端中添加fallback
属性指定服务降级的类就行了。
转载地址:http://sgdhb.baihongyu.com/