SpringCloud中整合Hystrix實現熔斷(從例項入手)
阿新 • • 發佈:2022-05-25
場景
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秒內進行高頻次的傳遞負數引數,使其觸發熔斷機制,
此時再接著傳遞正數引數,還是會提示不能為負數,因為此時已經熔斷,稍等一會之後,
鏈路會進行恢復,正數返回正常的引數。