聲明本篇文章部分內(nèi)容參考自 程序猿DD Spring Cloud系列書籍
斷路器模式源于Martin Fowler的Circuit Breaker一文皇型《氐“斷路器”本身是一種開關(guān)裝置涣楷,用于在電路上保護(hù)線路過載,當(dāng)線路中有電器發(fā)生短路時(shí)拭卿,“斷路器”能夠及時(shí)的切斷故障電路墨礁,防止發(fā)生過載、發(fā)熱、甚至起火等嚴(yán)重后果伊佃。
在分布式架構(gòu)中窜司,斷路器模式的作用就像是生活中家庭用電,一旦發(fā)生短路航揉,就立馬斷電塞祈,不讓災(zāi)難蔓延。
Netflix Hystrix
在Spring Cloud中使用了Hystrix 來實(shí)現(xiàn)斷路器的功能帅涂。Hystrix是Netflix開源的微服務(wù)框架套件之一议薪,該框架目標(biāo)在于通過控制那些訪問遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫的節(jié)點(diǎn)媳友,從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力斯议。Hystrix具備擁有回退機(jī)制和斷路器功能的線程和信號(hào)隔離,請(qǐng)求緩存和請(qǐng)求打包醇锚,以及監(jiān)控和配置等功能哼御。
在Spring Cloud中使用Hystrix組件,是非常容易的焊唬,只需要兩個(gè)注解
- 準(zhǔn)備工作
首先啟動(dòng)(eureka-server)服務(wù)注冊(cè)中心恋昼,兩個(gè)Service服務(wù)
- 添加Hystrix斷路器組件
只需要引入Hystrix依賴,在Ribbon負(fù)載均衡應(yīng)用啟動(dòng)類添加@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);
}
}
改造原來的服務(wù)消費(fèi)方式求晶,新增ComputeService類焰雕,在使用ribbon消費(fèi)服務(wù)的函數(shù)上增加@HystrixCommand注解來指定回調(diào)方法。
@Service
public class ComputeService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "addServiceFallback")//回調(diào)方法
public String addService() {
return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody();
}
public String addServiceFallback() { //回調(diào)方法
return "error";
}
}
- 驗(yàn)證斷路器的回調(diào)
- 依次啟動(dòng)eureka-server芳杏、compute-service矩屁、eureka-ribbon工程
- 訪問http://localhost:1111/可以看到注冊(cè)中心的狀態(tài)
- 訪問http://localhost:3333/add,頁面顯示:30
- 關(guān)閉compute-service服務(wù)后再訪問http://localhost:3333/add爵赵,
- 頁面顯示:error
本文標(biāo)題:Dekel Tankel 談 Cloud Foundry 與 Spring 前景
本文地址:https://www.oschina.net/news/68979/cloudfundry-meetup