4、Spring Cloud之熔斷處理 Hystrix

前言

熔斷處理什麼呢?在微服務項目中,有不少的服務,在服務消費者調用服務提供者的時候可能會出現網絡異常或者請求超時或者阻塞等等一系列問題,不過不進行處理的話,就可能致使,長時間等待,進程阻塞,最終致使系統癱瘓。java

因此就有了熔斷處理,當服務提供者的接口不能訪問或者異常異常時,進行降級處理,服務消費者可以正常的處理返回特定是數據。從而達到容災的目的。linux

看了一下Hystrix ,其實有不少東西,咱們就先來看看Hystrix 的簡單使用,因爲上節咱們也說了Fegin 中集成了Hystrix 和ribbon .因此咱們就直接使用Fegin 來實現一個簡單的熔斷處理的操做。git

pom.xml

其實咱們徹底能夠在上一節的ribbon-consumer 的基礎上來,我這裏爲了保持獨立性,因此copy 了一份ribbon-consumer 改爲hystrix-consumer。
pom文件引入fegin 的依賴程序員

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

在主類中增長@EnableFeignClients,其實這裏僅僅使用hystrix 的話,可使用@EnableCircuitBreaker。
在這裏插入圖片描述github

application.properties

配置文件中開啓熔斷處理,將feign.hystrix.enabled設置爲tuespring

#開啓熔斷處理
feign.hystrix.enabled=true

fallback

重點來啦,咱們上一節在HelloService 中調服務提供者的接口,因此要作熔斷處理的話,就須要在這裏進行降級處理,就須要寫一個降級處理的方法,若是服務提供者的接口不通,就調用這個方法,返回給客戶端。
因此咱們在server層建立一個fallback 文件夾,在fallback 包下建立HelloServiceFallback類實現 HelloService。內容以下:segmentfault

@Component
public class HelloServiceFallback implements HelloService {
    @Override
    public String hello() {
        return "hello error";
    }

    @Override
    public String hello2(@RequestParam(value = "name") String name) {
        return "hello2 error";
    }

    @Override
    public String hello3(@RequestParam(value = "name") String name, @RequestParam(value = "age") String age) {
        return "hello3 error";
    }
    
    @Override
    public String hello4(@RequestBody Map<String, Object> parms) {
        return "hello4 error";
    }
}

注意給整個類加上@Component 註解,而後就是實現HelloService 中的方法啦。網絡

而後咱們須要在HelloService 中的@FeignClient 註解作修改app

@FeignClient(name = "ribbon-provider",fallback = HelloServiceFallback.class)

name 用來指定服務提供者的服務名,fallback 用來指定降級處理的類。這裏就是咱們剛剛寫HelloServiceFallback。
在這裏插入圖片描述
好了咱們來啓動項目測試一下。啓動這三個項目,分別是註冊中心,服務提供者hystrix-consumer,服務消費者ribbon-provider-9004
在這裏插入圖片描述
而後咱們在界面輸入ide

http://localhost:9006/fegin

而後關閉服務提供者,再調接口試試。
在這裏插入圖片描述
能夠看到服務提供者的接口斷掉以前和以後返回的結果是不同的。說明咱們的熔斷處理是生效的啦。

番外

今天就說這麼多吧,就先學習一下Hystrix 的基本使用,其餘的一些功能,咱們後續再說

代碼上傳到github:
https://github.com/QuellanAn/springcloud

後續加油♡

歡迎你們關注我的公衆號 "程序員愛酸奶"

分享各類學習資料,包含java,linux,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。

若是你們喜歡記得關注和分享喲❤

file

相關文章
相關標籤/搜索