Spring Cloud斷路器Hystrix
Hystrix
《極簡Spring Boot搭建、開發、部署》
《Spring Cloud註冊中心——Eureka&集群》
《Spring Cloud網關Zuul&過濾器&集群方案》
《Spring Cloud網關&負載均衡Zuul&Ribbon》
《Spring Cloud服務間調用Feign》
上文講到Spring Cloud中,我們服務間調用使用Feign——聲明式Web服務客戶端。
在分散式系統中,一個服務會調用多個其他微服務,而在調用過程中很容易因為某些原因(網路連接慢,資源緊張,阻塞等)導致某個微服務無法正常提供服務,而作為調用方應該有一種容錯機制,來隔離這種異常,從而不讓一個微服務的異常影響整體的運行。
Hystrix官網舉的例子:
服務可用分析
大意是1個系統依賴30個微服務,假設每個微服務可用時間是99.99%,換算成整個系統就是99.99的30次方約99.7%可用時間,0.3%不可用。
1億的請求有30萬失敗。30天有2個多小時不能正常提供服務。
現實通常比這更糟糕。
我舉個栗子:假設我們在電商網站買東西,從下單到完成要依賴三個微服務:訂單、支付、物流。遇上雙11或618,客戶的訂單蜂擁而至,這時候物流微服務可能因為程序優化不好或者硬體資源不夠而不能及時提供服務,如果因為物流的問題而導致客戶無法下單,這到手的錢掙不到了就很可惜了。
這時候就可以對物流微服務進行熔斷,暫時不調用,全力以赴把訂單、支付給完成了。熬過去這段峰值,回過頭來再處理物流的問題,反正錢已到手。不會因為一顆老鼠屎壞一鍋湯。
Spring Cloud的斷路器是Hystrix,兩種使用方法,一種是直接使用Hystrix,一種是通過FeignClient。本文介紹第二種。
application.yml
FeignClient自帶Hystrix,在配置中啟用就好。
代碼
新建一個Fallback處理類,實現FeignClient介面:
異常處理類
修改FeignClient介面,指定Fallback處理類:
FeignClient修改
結果驗證
依次啟動Eureka註冊中心、Order Service、Feign Service:
正常訪問如下圖,調用沒問題:
正常
關掉Order Service,熔斷機制啟動,結果如下圖:
熔斷
※Spring Cloud服務間調用Feign
※Spring Cloud網關&負載均衡Zuul&Ribbon
※Spring Cloud網關Zuul&過濾器&集群方案
※Spring Cloud註冊中心——Eureka&集群
※極簡Spring Boot搭建、開發、部署
TAG:Java個人學習心得 |
※spring cloud netflix:斷路器之Hystrix Dashboard
※Spring Cloud Gateway的After路由斷言工廠
※Spring Security 5.0 的 DelegatingPasswordEncoder 詳解
※Spring中BeanFactory和ApplicationContext 的區別
※使用Spring Boot + Resilience 4j實現斷路器
※SpringBoot:SpringDataRedis緩存改造
※深入 JVM 分析 spring-boot 應用 hibernate-validatorNoClassDefFoundError
※Springboot2.X之切換使用Servlet容器Jetty、Tomcat、Undertow
※Spring data MongoDB 之 MongoRepository
※譯:Spring Cloud Config:Git 後端
※網關 Spring-Cloud-Gateway 源碼解析——路由之RouteDefinitionLocator一覽
※Spring Boot 配置文件 yml與properties
※Spring整合Hibernate.Final
※深入 SpringBoot : 怎樣排查 expectedsinglematchingbeanbutfound 2 的異常
※Spring4+hibernate+SpringMvc整合
※Spring security + oauth2.0 + redis + mybatis plus 搭建微服務
※Spring Cloud Alibaba Sentinel 整合 Feign 的設計實現
※SpringBoot伺服器壓測對比(jetty、tomcat、undertow)
※SpringCloud統一配置中心Config Client
※使用Spring Cloud和Reactor在微服務中實現Event Sourcing