1. 程式人生 > >SpringCloud學習筆記-Hystrix熔斷器

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