Spring Cloud -- Hystrix服務降級(Client端)
前言
上一篇,我們探討了Hystrix如何在Service端實現服務降級,使Service端在發生Timeout或是當機的狀況時,整體的系統不至於服務雪崩,但不只在Service端需要,消費者服務端也需要好好的保護自己,畢竟每一台Client端都不盡相同,也沒辦法保證Service端能夠永遠正確,以下,就讓我們繼續來探討Hystrix放在Client端的做法。
Hystrix服務降級(Client端)
1. 我們在這裡再建立一個消費端的module Hystrix-order80來打Service端的API,如下圖
13. pom中一樣也要加入Hystrix的包
14. 建立一個Service層,這個部分因為我們需要打hystrix-payment8001,我們建立一個介面,並使用 @FeignClient 來設定需打的API位置
15. 建立Controller層,公開的位址我們都加上consumer
16. 建立application.yml,將module註冊進Eureka7001
17. 啟動Eureka7001、Hystrix-payment8001、Hystrix-order80,用http://localhost/consumer/payment/hystrix/ok/31 可以看到也是可以正常打到服務的
18. 接下來我們將在Client端上加上Hystrix,在Hystrix-order80的Controller -> paymentInfo_Timeout上也加上HystrixCommand,並做一個接住Exception的FallbackMethod,在這裡為了模擬Client端因為Service端執行超時而服務降級,這裡的執行時間(value)我們設定1500。也就是指業務邏輯上我們執行時間超過1.5秒就將服務降級的意思。
19. Hystrix-order80的application.yml中加入Hystrix的設定如下圖
20. Hystrix-order80的main加上 @EnableHystrix的annotation
21. 我們再啟動Eureka7001、Hystrix-payment8001、Hystrix-order80,用http://localhost/consumer/payment/hystrix/timeout/31,我們可以看到我們已成功在消費者服務端將服務降級。
以上,就是我們這次分享的 Hystrix的服務降級(Client端),下一篇我們會繼續探討Hystrix的服務熔斷如何配置,文章中若有疏漏,也歡迎各位前輩不吝指教,謝謝大家~
參考文獻
尚硅谷Spring Cloud教程
https://github.com/Netflix/Hystrix/wiki/How-To-Use