SpringCloud學習筆記-Hystrix熔斷器
摘自官網http://springcloud.cc的定義:“熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。”
在微服務框架內一個介面可能就是一個微服務, 各個服務之間相互依賴, 假設某個微服務執行緩慢甚至宕掉了, 會阻塞呼叫者執行緒,出現類似Android裡常見的ANR錯誤; 即呼叫者程序無法釋放資源,導致程序佔用記憶體越來越大直到呼叫者程序掛掉。
熔斷器的作用就是即時發現執行異常的服務, 告知呼叫者不再呼叫該服務介面, 從而避免呼叫者服務資源消耗殆盡。 原理如官網插圖:
被呼叫者服務執行異常時, 呼叫者服務會執行回撥函式。
SpringCloud框架內微服務間互動使用Rest或Feign, 下面分別介紹整合方法。
1、 RestTemplate + Hystrix:
在工程pom.xml檔案裡新增spring-cloud-starter-hytrix依賴。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
在程式入口類添加註解@EnableHytrix, 表示載入熔斷器功能。
改造介面服務類@EnableEurekaClient @SpringBootApplication @EnableHystrix public class SpringCloudConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudConsumerApplication.class, args); } @LoadBalanced @Bean RestTemplate restTemplate() { return new RestTemplate(); } }
運行當前工程, 並在瀏覽器內輸入http://localhost:11000/consumer?param="hytrix" , 瀏覽器顯示:
你呼叫了hello-service1的API,結果是sorry,"hytrix",service-hello1 not responde
因為沒啟動呢service-hello1服務, 所以執行了回撥函式, 從而避免阻塞呼叫者執行緒。2、Feign + Hystrix
OpenFeign是自帶斷路器的, 不用在pom.xml和入口類新增新增引用, 但hytrix預設是關閉的, 需要設定feign.hystrix.enabled=true。開啟SrpingCloudFeignDemo工程, 修改application.yml。
eureka:
client:
serviceUrl:
defaultZone: http://localhost:10001/eureka/
server:
port: 12000
spring:
application:
name: service-feign-consumer
feign:
hystrix:
enabled: true
修改外部服務介面類, 在註解@FeignClient裡添加回調類。
實現介面類ServiceHello1, 注意ServiceHello1Impl函式引數跟介面類的區別!!!
啟動當前工程, 這是還沒執行service-hello1服務。
在瀏覽器輸入http://localhost:12000/hello?param="this is feigndemo“後, 瀏覽器顯示:
sorry, "this is feigndemo" service-hello1 not responde
參考程式碼: http://download.csdn.net/download/brycegao321/10138936