如果您認為對你有幫助滴铅,請點個贊!
準備工作
請先按照 spring cloud實戰(zhàn):1- 服務(wù)注冊中心Eureka 完成準備工作司蔬,具體包括:
- Eureka服務(wù)(服務(wù)注冊中心):eureka_server
- 服務(wù)提供方:provider
- 服務(wù)消費者:consumer
三者的關(guān)系是:consumer會通過服務(wù)注冊中心調(diào)用外部服務(wù)provider
熔斷器原理概述
熔斷器是服務(wù)消費者(consumer)與服務(wù)提供者(provider
)之間的一個開關(guān)它掂,當此開關(guān)關(guān)閉時(即沒有熔斷),consumer的調(diào)用請求會發(fā)給provider處理晶密。
如果請求調(diào)用失敗的比例達到閥值時(表示provider
負載過高),熔斷器會自動打開模她,這樣consumer人請求就不會發(fā)給provider處理稻艰,避免provider負載過高。
熔斷器關(guān)閉達到指定時間后侈净,會半開尊勿,即轉(zhuǎn)發(fā)一個請求,若成功則關(guān)閉熔斷器畜侦,若失敗則繼續(xù)打開元扔。
實戰(zhàn)
本實戰(zhàn)是在 spring cloud實戰(zhàn):1- 服務(wù)注冊中心Eureka 的基礎(chǔ)上進行。
由于熔斷器是通過對服務(wù)調(diào)用的成功率旋膳,決定是否熔斷摇展,實際上是對后端服務(wù)提供過載保護。但熔斷器的控制邏輯是在調(diào)用端溺忧。因此要啟用熔斷器咏连,需要在consumer端進行處理。
因此需要對 eureka _consumer 項目模塊進行修改鲁森。
啟用熔斷器
在application.properties文件中祟滴,啟用熔斷器,配置如下:
### 啟用熔斷器
feign.hystrix.enabled=true
fallback實現(xiàn)類
在spring cloud實戰(zhàn):1- 服務(wù)注冊中心Eureka中歌溉,我們定義了 **** 接口垄懂,但并未實現(xiàn)。
在這里我們將實現(xiàn)該接口痛垛,該實現(xiàn)類將在服務(wù)端熔斷后被自動調(diào)用
新建FeignSayHelloFallback.java類草慧,并實現(xiàn)IFeignSayHello接口,代碼如下:
package com.example.eureka.consumer;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
@Component
public class FeignSayHelloFallback implements IFeignSayHello {
@Override
public String sayHello(@RequestParam(value = "name") String name) {
return "熔斷保護已開啟匙头!";
}
}
啟用fallback
在IFeignSayHello接口中漫谷,添加fallback屬性指定fallback實現(xiàn)類
//在FeignClient注解中,添加fallback屬性指定fallback實現(xiàn)類
@FeignClient(name = "spring-cloud-produce-say-hello",fallback = FeignSayHelloFallback.class)
測試熔斷
將 eureka_server蹂析、eureka_provider舔示、eureka_consumer都啟動起來碟婆。這時用瀏覽器訪問consumer的REST服務(wù),可以正常運行惕稻。
然后我們將eureka_provider人工停止竖共,再次訪問consumer的REST服務(wù),這時服務(wù)會被熔斷俺祠,界面如下: