在 Ribbon中使用断路器
在项目pom 加上hystrix的依赖
<!-- hystrix 断路器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>在程序的启动类RibbonConsumerApplication 通过 @EnableHystrix开启Hystrix 断路器监控
@EnableHystrix @EnableDiscoveryClient @SpringBootApplication public class RibbonConsumerApplication { @LoadBalanced @Bean RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonConsumerApplication.class, args); } }修改 ConsumerController 类的,hello 方法,加上注解@HystrixCommand(fallbackMethod = "defaultStores") 该注解对该方法创建了熔断器的功能 ,并指定了defaultStores熔断方法,熔断方法直接返回了一个字符串, "feign + hystrix ,提供者服务挂了"
@HystrixCommand表明该方法为hystrix包裹,可以对依赖服务进行隔离、降级、快速失败、快速重试等等hystrix相关功能 该注解属性较多,下面讲解其中几个
fallbackMethod 降级方法commandProperties 普通配置属性,可以配置HystrixCommand对应属性,例如采用线程池还是信号量隔离、熔断器熔断规则等等ignoreExceptions 忽略的异常,默认HystrixBadRequestException不计入失败groupKey() 组名称,默认使用类名称commandKey 命令名称,默认使用方法名 /** * 描述:调用提供者的 `home` 方法 * **/ @RestController public class ConsumerController { @Autowired private RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "defaultStores") @GetMapping(value = "/hello") public String hello() { return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody(); } public String defaultStores() { return "Ribbon + hystrix ,提供者服务挂了"; } }依次启动项目: spring-cloud-eureka-service spring-cloud-eureka-provider-1 spring-cloud-eureka-provider-2 spring-cloud-eureka-provider-3 spring-cloud-ribbon-consumer-hystrix
启动该工程后,访问服务注册中心,查看服务是否都已注册成功:http://localhost:8761/
在命令窗口curl http://localhost:9000/hello,发现一切正常
或者浏览器get 请求http://localhost:9000/hello F5 刷新 停止 spring-cloud-eureka-provider-1 提供者,端口为:8081服务
再次访问命令窗口curl http://localhost:9000/hello,断路器已经生效,提示:Ribbon + hystrix ,提供者服务挂了。