本章課程學習目標:
(1)Spring Cloud微服務架構
(2)Hystrix熔斷器組件的學習
(3)SHOP商城微服務Hystrix熔斷器組件代碼實戰
1爲什麼要使用熔斷器
在微服務架構中通常會有多個服務層調用,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱爲服務雪崩效應。服務雪崩效應是一種因“服務提供者”的不可用導致“服務消費者”的不可用,並將不可用逐漸放大的過程。
如果下圖所示:A作爲服務提供者,B爲A的服務消費者,C和D是B的服務消者A不可用引起了B的不可用,並將不可用像滾雪球一樣放大到C和D時,雪崩效應就形成了。
如何避免產生這種雪崩效應呢?我們可以使用Hystrix來實現熔斷器。
2什麼是Hystrix
Hystrix [hɪst’rɪks]的中文含義是豪豬, 因其背上長滿了刺,而擁有自我保護能力。
Hystrix 能使你的系統在出現依賴服務失效的時候,通過隔離系統所依賴的服務,防止服務級聯失敗,同時提供失敗回退機制,更優雅地應對失效,並使你的系統能更快地從異常中恢復。
瞭解熔斷器模式請看下圖:
3Hystrix組件代碼實戰應用
如果代碼看的不是很清楚,請從spring Cloud微服務實戰項目(一)開始看SpringCloud之服務發現組件 Eureka與Feign組件(二)
3.1shop商城熔斷器實戰
Feign 本身支持Hystrix,不需要額外引入依賴。
- (1) 修改shop_order模塊的application.yml ,開啓hystrix
feign:
hystrix:
enabled: true - (2)在com.springcloud.order.client包下創建impl包,包下創建熔斷實現類,實現自接口ProductClient
1. package com.springcloud.order.client;
2. import entity.Result;
3. import entity.StatusCode;
4. import org.springframework.stereotype.Component;
5. import java.util.Map;
6. @Component
7. public class ProductClientImpl implements ProductClient {
8.
9. @Override
10. public Result findSearch(Map searchMap) {
11. return new Result(false, StatusCode.ERROR,"搶購太火爆了--排隊中");
12. }
13. }
- (3)修改ProductClient的註解
@FeignClient(value = "shop-product",fallback = ProductClientImpl.class)
- (4)測試運行
重新啓動商品和訂單微服務,測試看熔斷器是否運行。
測試:只要商品微服務掛了,或者有錯誤則,服務接口走熔斷器。
應用場景:雙11下單人數太多,商品微服務承載壓力有限,萬一人數超多服務假死狀態則調用熔斷器業務處理,商品太火爆排隊中。
3.2shop商城熔斷器測試
(1)啓動shop_eureka註冊中心微服務
(2)啓動shop_product商品微服務
(3)啓動shop_order訂單微服務
(4)正常測試情況:商品微服務可用
(5)停止商品微服務,模擬商品微服務宕機:則創建訂單服務繼續可以走熔斷器邏輯。
4個人說明
經驗是由一點一點積累的,思維也是由一天一天訓練出來的。
謝謝大家的閱讀,原創不易,如果你認爲文章對你有所幫助,就點個贊感謝大家支持,你的點贊是我持續寫作的動力。