声明本篇文章部分内容参考自 程序猿DD Spring Cloud系列书籍
断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,“断路器”能够及时的切断故障电路,防止发生过载、发热、甚至起火等严重后果。
在分布式架构中,断路器模式的作用就像是生活中家庭用电,一旦发生短路,就立马断电,不让灾难蔓延。
Netflix Hystrix
在Spring Cloud中使用了Hystrix 来实现断路器的功能。Hystrix是Netflix开源的微服务框架套件之一,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。
在Spring Cloud中使用Hystrix组件,是非常容易的,只需要两个注解
- 准备工作
首先启动(eureka-server)服务注册中心,两个Service服务
- 添加Hystrix断路器组件
只需要引入Hystrix依赖,在Ribbon负载均衡应用启动类添加@EnableCircuitBreaker
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class RibbonApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
改造原来的服务消费方式,新增ComputeService类,在使用ribbon消费服务的函数上增加@HystrixCommand注解来指定回调方法。
@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";
}
}
- 验证断路器的回调
- 依次启动eureka-server、compute-service、eureka-ribbon工程
- 访问http://localhost:1111/可以看到注册中心的状态
- 访问http://localhost:3333/add,页面显示:30
- 关闭compute-service服务后再访问http://localhost:3333/add,
- 页面显示:error
本文标题:Dekel Tankel 谈 Cloud Foundry 与 Spring 前景