Spring Cloud 之斷路器

Spring Cloud中使用Hystrix來實現斷路器的功能。

Ribbon中引入Hystrix

1. pom.xml引入spring-cloud-starter-hystrix,application主類中使用@EnableCircuitBreaker,開啓斷路器功能。

2. RestTemplate遠程調用代碼收斂到新的方法,在該方法上使用@HystrixCommand(fallbackMethod = "**Fallback")

3. 增加**Fallback方法,裏面編寫出現斷路時的處理邏輯等

注意:

1. 回退方法的名稱可隨意定,但出、入參必須和所註解的方法一致,否則報fallbackMethod未定義錯誤

2. 遠程方法執行時間大於斷路器的時限(例如timeoutInMilliseconds=5s,而遠程方法執行10s),hystrix中的MethodExecutionAction.execute捕獲異常,HystrixCommand檢查是否有配置回退方法,如果有,則回退方法執行,調用方按回退方法返回的內容繼續執行,直到業務處理結束。如果沒有,則拋HystrixRuntimeException

Feign使用Hystrix

1. 不需要在Feigh工程中引入Hystix,Feign中已經依賴了Hystrix

2. 不需要在主類使用@EnableCircuitBreaker,已自動開啓該功能

3. 在FeignClient的interface上設置fallback,如 @FeignClient(value = "user-service", fallback = UserServiceHystrix.class)

4. 增加UserServiceHystrix類實現feign接口,重寫其中的方法,裏面的邏輯爲:容錯處理,例如,直接返回錯誤

注意:

1. 不需要在FeignClient的interface上使用@HystrixCommand,已隱含,所以在沒有寫fallback類的情況下,拋異常:hystrix中的InvocableHandlerMethod.doInvoke捕獲HystrixRuntimeException,錯誤信息 ** failed and no fallback available;超時:同上,捕獲HystrixRuntimeException,錯誤信息 ** timed-out and no fallback available

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章