Hystrix常用概念 註解及配置

2022-08-23 23:09:15 字數 2802 閱讀 8724

概念:

執行緒隔離:將不同服務的請求用不同的執行緒池進行隔離,當某個服務不可用時請求只會耗盡該服務的執行緒池,但不會耗盡所有服務的執行緒池

服務降級:當某個服務不可用時,請求一直在等待(阻塞),則超過某個時間,自動返回該請求,告知乙個友好提示,直到服務訪問可以成功為止

一  服務降級方式

註解:因此可以使用:

替代上述3條註解

在服務呼叫處新增:

1服務呼叫方法上新增:

@hystrixcommand(fallbackmethod = "fallback")

2增加fallback方法:

public string fallback(long id)

3要求fallback方法和呼叫方法的返回值型別,引數列表必須一致

因此更改服務呼叫方法:

更改後的完整**:

由於有預設配置,因此此刻已經可以執行!

為了可以看到效果,在user-service服務提供**中只要增加執行緒睡眠,時間設定1500毫秒,即可觀察到效果

如果此類中有很多服務呼叫方法,為每個方法寫乙個fallback方法不合理,因此可以設定統一的fallback方法:

在服務呼叫類上方加入:

@defaultproperties(defaultfallback = "fallback")

在方法需要返回錯誤資訊的服務呼叫方法上直接加入註解即可:

@hystrixcomman
由於此中方式,fallback方法屬於統一錯誤處理方法,應當適用所有服務呼叫發放的錯誤呼叫,因此此種方式預設呼叫空參fallback方法,所以改fallback方法的引數列表為空參即可:

public string fallback()

改造後的完整**:

以上,由於使用hystrix預設超時時長設定(預設超時時長為:1s),實際使用時各個服務的呼叫可能不同,因此統一設定超時時長不一定適用所有服務呼叫方法

因此,可以需要手動設定超時時長,有兩種方法:

1 在服務呼叫方法中調整該服務呼叫方法的預設超時時長:

@hystrixcommand(commandproperties = )

完整**:

這種方法可以針對每個服務呼叫方法設定超時時長

2 或者在配置檔案中設定:

properties:

hystrix.commend.default.execution.isolation.thread.timeoutinmilliseconds=3000

hystrix.commend.user-service.execution.isolation.thread.timeoutinmilliseconds=5000

hystrix.commend.querybyid.execution.isolation.thread.timeoutinmilliseconds=2000

yaml:

hystrix:

commend:

default:

execution:

isolation:

thread:

timeoutinmilliseconds: 3000

user-service:

execution:

isolation:

thread:

timeoutinmilliseconds: 5000

querybyid:

execution:

isolation:

thread:

timeoutinmilliseconds: 2000

default部分為更改全域性的預設超時時長

user-service部分為設定訪問user-service伺服器的超時時長

querybyid部分為設定querybyid方法的超時時長

二  熔斷方式

之前使用服務降級方式,此種方式由於每個請求都要達到超時時間才返回,大大降低服務併發性,因此通常使用熔斷方式

熔斷:當大量請求無法正常訪問時(觸發服務降級中的超時時長),hystrix則認為服務有問題,此時將會關閉服務,所有訪問該服務的請求全部直接返回錯誤,不再等待超時時長

即:觸發服務降級達到熔斷器的閥值則開啟熔斷

熔斷的3種狀態(針對熔斷器):

open、half open、closed

即:熔斷器開啟:當所有請求失敗的比例到達閥值(預設為50%,請求次數不低於20次),則會出發熔斷器開啟狀態,所有請求直接回覆錯誤

熔斷器半開:熔斷器開啟狀態(預設5s),之後進入半開狀態,放部分請求通過,測試訪問是否成功,如成功則熔斷器轉入關閉狀態,如依舊不成功則熔斷器繼續進入開啟狀態並再次進行倒計時

熔斷器關閉:所有請求可以正常訪問服務

circuitbreaker.requestvolumethreshold=20 //觸發熔斷的最小請求次數,預設為20

circuitbreaker.sleepwindowinmilliseconds=5000 //休眠時長,預設為5秒

circuitbreaker.errorthresholdpercentage

=50 //觸發熔斷的失敗請求最小佔比,預設50%

當主類上方使用@enablecircuitbreaker

註解,即熔斷器方式生效

注:通常只需要修改超時時長即可,因為超時時長預設1秒太短,網路波動都有可能出發超時,其他設定通常不需要額外更改

註解概念與常用註解

註解概念與常用註解 註解在開發過程中可以簡化複雜的檔案配置,優化設計模式結構,使得現在的開發模式逐漸變為註解 設計模式 反射 annotation概念 註解在 中是一種標記符號,這些標記符號可以在 的原始碼期 編譯期和執行期被讀取,執行相應的功能。annation 修飾範圍 註解可以用來修飾 的包 ...

SpringBoot常用註解及介紹

parmas 指定request中必須包含某些引數值,才讓該方法處理。headers 指定request中必須包含某些指定的header值,才能讓該方法處理請求。method 指定請求的method型別 consumes 指定處理請求的提交內容型別,content type produces 指定返...

Ribbon常用註解及配置

ribbon在服務呼叫方使用 常用註解及範例 服務呼叫方 原理 ribbon會攔截resttemplate之後取出 user server 字串,以 user server 作為服務id找eureka獲取服務例項,之後自動進行拼接 即自動拼接位址及埠 並使用拼接後的url重新傳送請求 因此 load...