Spring Cloud Hystrix--熔断器

一、Hystrix 熔断器

1、引入pom

  org.springframework.boot spring-boot-starter-parent 1.3.5.RELEASE      org.springframework.cloud spring-cloud-starter-ribbon    org.springframework.cloud spring-cloud-starter-hystrix   org.springframework.cloud spring-cloud-starter-eureka   org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-test test      org.springframework.cloud spring-cloud-dependencies Brixton.RELEASE pom import   
2、编写业务类

service

@Service public class ComputeService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "addServiceFallback") public String addService() { return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody(); } public String addServiceFallback() { return "error"; } }
controller

@RestController public class ConsumerController { @Autowired private ComputeService computeService; @RequestMapping(value = "/add", method = RequestMethod.GET) public String add() { return computeService.addService(); } }
启动类

@SpringBootApplication @EnableEurekaClient @EnableCircuitBreaker public class RibbonHystrixApplication { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(RibbonHystrixApplication.class, args); } } 
3、添加配置

spring.application.name=ribbon-Hystrix server.port=3333 eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
刷新http://localhost:1111/ 可见

启动了两个service服务,当未加hystrix断路器前,关闭compute-service服务,访问http://localhost:3333/add,页面直接error page,当如上,加上hystrix断路器后,虽然compute-service服务仍处于关闭状态,调用时直接返回程序指定的error信息。

二、Hystrix流程分析

1、在启动类上添加@EnableCircuitBreaker 注解,表示本类开启熔断器功能。

2、在原来controller的基础上,添加一层ComputeService类,在服务调用方法上,添加@HystrixCommand(fallbackMethod = "addServiceFallback")并指定回调方法addServiceFallback。

三、How does Hystrix work?

服务均可用下,用户请求状态                      某个服务延迟或不可用时用户请求状态           服务延迟且多用户同时访问

Spring Cloud Hystrix--熔断器_第1张图片   Spring Cloud Hystrix--熔断器_第2张图片  Spring Cloud Hystrix--熔断器_第3张图片
所以当某个服务不可用时,所有用户请求均block阻塞到当前一个service处。后果可想

Hystrix的出现如同保险丝一样,在危机时刻及时解决阻塞-且不停发送服务访问请求问题。

1、Hystrix可配置依赖调用超时时间,当调用超时时,直接返回或执行fallbackMethod逻辑

2、为每一个依赖提供一个线程池,调用次数大于线程数量时,立即拒绝连接。

3、提供近实时依赖调用情况统计和监控。

Spring Cloud Hystrix--熔断器_第4张图片

所以如图每个服务都已thread pool形式给出,分发到某单个thread实例,当某个服务(thread)不可用时,立即fail fast、fail silent、fallback。并近实时监控服务当前情况。



你可能感兴趣的:(Spring Cloud Hystrix--熔断器)