1. 程式人生 > 其它 >SpringCloud中整合Hystrix實現熔斷(從例項入手)

SpringCloud中整合Hystrix實現熔斷(從例項入手)

場景

SpringCloud中整合Hystrix實現服務降級(從例項入手):

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124948025

服務熔斷

類比保險絲達到最大服務訪問之後,直接拒絕訪問,拉閘限電,然後呼叫服務降級的方法並返回友好提示。

服務的降級-進而熔斷-恢復呼叫鏈路。

熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。當扇出鏈路的某個微服務出錯不可用或者響應時間

太長時,會進行服務的降級,進而熔斷該節點微服務的呼叫,快速返回錯誤的響應資訊。

當檢測到該節點微服務呼叫響應正常後,恢復呼叫鏈路。

在Spring Cloud框架中,熔斷機制通過Hystrix實現。Hystrix會監控微服務之間呼叫的狀況。

當失敗的呼叫達到一定閾值,預設是5秒內20次呼叫失敗,就會啟動熔斷機制。熔斷機制的註解是@HystrixCommand

注:

部落格:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程式猿
獲取程式設計相關電子書、教程推送與免費下載。

實現

1、在上面的基礎上,在服務提供者8001的service新建業務方法模擬熔斷的觸發場景

    @HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
            @HystrixProperty(name 
= "circuitBreaker.enabled",value = "true"),// 是否開啟斷路器 @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),// 請求次數 @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), // 時間視窗期 @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage
",value = "60"),// 失敗率達到多少後跳閘 }) public String paymentCircuitBreaker(@PathVariable("id") Integer id) { if(id < 0) { throw new RuntimeException("******id 不能負數"); } String serialNumber = IdUtil.simpleUUID(); return Thread.currentThread().getName()+"\t"+"呼叫成功,流水號: " + serialNumber; } public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id) { return "id 不能負數,請稍後再試,/(ㄒoㄒ)/~~ id: " +id; }

注意這裡的註解的各個含義。

這個業務方法會根據傳遞的引數返回正常和異常的結果。

2、Controller層新建方法呼叫

    @GetMapping("/payment/circuit/{id}")
    public String paymentCircuitBreaker(@PathVariable("id") Integer id)
    {
        String result = paymentService.paymentCircuitBreaker(id);
        log.info("****result: "+result);
        return result;
    }

3、然後呼叫該介面,在10秒內進行高頻次的傳遞負數引數,使其觸發熔斷機制,

此時再接著傳遞正數引數,還是會提示不能為負數,因為此時已經熔斷,稍等一會之後,

鏈路會進行恢復,正數返回正常的引數。