【Spring Cloud笔记】 断路器-hystrix

在微服务架构中,一个微服务的超时失败可能致使瀑布式连锁反映,Spring Cloud Netflix 的断路器Hystrix经过自主反馈,防止了这种状况发生。下面介绍简单的断路器使用方法。java

【step1】:在项目的pom文件添加Hystrix依赖spring

 

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

 

【step2】:因为Spring Cloud集群内部服务调用能够经过Ribbon或者Feign实现,因此断路器具体使用也分两种场景。先介绍Ribbon使用方式。架构

一、在启动类加注解,@EnableCircuitBreaker,开启断路器支持app

二、在服务调用上就爱注解@HystrixCommand,示例代码以下:ide

@Service
public class RestService {

  @Autowired
  RestTemplate restTemplate;

  @HystrixCommand(fallbackMethod = "serviceFailure")
  public String getHelloContent() {
    return restTemplate.getForObject("http://SERVICE-001/",String.class);
  }

  public String serviceFailure() {
    return "the service is not available !";
  }
}

这里注意:微服务

一、@HystrixCommand注解的fallbackMethod指定失败后的备用处理方法,咱们能够分别将原服务SERVICE-001开启和关闭后分别执行调用测试,正常状况下返回原服务内容,当原服务不可用的状况下,将返回serviceFailure备用方法的内容测试

二、备用方法定义的返回类型必须与原方法一致,不然会抛出转换异常。ui

 

【step3】:Feign中使用断路器Hystrixspa

一、因为Feign内部已经支持断路器,不须要显示在启动类上加@EnableCircuitBreaker注解rest

二、在Feign类上注解@FeignClient,并经过fallback指定服务异常备用类,示例代码以下

@FeignClient(name = "SERVICE-001", fallback = RestServiceFailure.class)
public interface RestService {
@RequestMapping(value = "/test", method = RequestMethod.GET)
  public String test();
}

  

三、建立服务异常备用类,注意必须实现RestService接口,并添加注解,做为bean注入到容器中,以下

 

@Service
public class RestServiceFailure implements HelloWorldService {
  @Override
  public String test() {
    return "the service is not available !";
  }
}

测试方法同Ribbon同样,能够获得相同的结果。