微服務使用 Hystrix 實現服務降級

2021-10-09 20:18:51 字數 3577 閱讀 9433

設想乙個場景,很多人都在請求乙個介面,此時這個介面就會變得非常繁忙,呼叫者就要等待很長時間,而微服務是互相呼叫的,所以微服務的呼叫者即客戶端回等待很長時間,給使用者造成不好的使用體驗。

而服務降級,就是指在服務端發生超時或者出錯的時候,客戶端要及時的遮蔽這些不好的資訊,給使用者乙個良好的體驗,比如在請求超時的時候,固定如果超過 3 秒就提示使用者系統繁忙請稍後再試。

如果實在服務端,即服務的提供方,我們可以在系統業務類上加乙個hystrixcommand註解。

同時在主啟動類上加乙個@enablecircuitbreaker註解。

@enableeurekaclient

@enablecircuitbreaker

public

class

paymenthystrixmain8001

}業務類:

/**

* hystrixcommand 服務降級:

* 在微服務呼叫中的服務端

* 發生超時或者出現異常之後呼叫兜底的方法處理;

* * @param id id

* @return 返回提示資訊

*/@hystrixcommand

( fallbackmethod =

"paymentinfotimeouthandler"

, commandproperties =

)public string paymentinfotimeout

(integer id)

catch

(interruptedexception e)

return

"執行緒池: "

+ thread.

currentthread()

.getname()

+" paymentinfo_ok, id: "

+ id +

"\t"

+"耗時3秒鐘!"

;}

/**

* 具體的處理方法

* * @param id id

* @return 返回提示資訊

*/public string paymentinfotimeouthandler

(integer id)

該註解的作用是,先設定乙個兜底的方法來應對突發情況,如果超過了設定的時間或者出現了異常就觸發這個方法。

此時我們如果再去訪問超時的介面就會收到提示資訊。

對於使用feign進行呼叫的客戶端,我們也可以在控制器上加上類似的方法。

/**

* 客戶端服務降級:

* 請求不到資訊,這幾齣提示資訊

* * @param id

* @return

*/@hystrixcommand

(fallbackmethod =

"paymenttimeoutfallbackmethod"

, commandproperties =)(

"/consumer/payment/hystrix/timeout/"

)public string paymentinfotimeout

(@pathvariable

("id"

) integer id)

/** * 兜底方法

* * @return 返回提示資訊

*/public string paymenttimeoutfallbackmethod()

@enableeurekaclient

@enablehystrix

public

class

paymenthystrixmain80

}這樣配置之後客戶端可以更好的保護自己。

對於上述**有兩個問題:

每個業務方法對應乙個兜底的方法,**膨脹;

應該讓統一和自定義的方法分開。

對此我們可以使用@defaultproperties(defaultfallback = "")註解表示不配置兜底方法預設觸發的方法

@restcontroller

@slf4j

@defaultproperties

(defaultfallback =

"paymentglobalfallbackmethod"

)public

class

orderhystrixcontroller")

public string paymentinfotimeout

(@pathvariable

("id"

) integer id)

/** * 兜底方法

** @return 返回提示資訊

*/public string paymentglobalfallbackmethod()

}

其中paymenthystrixservice是 feign 呼叫服務的介面類入口。

如上,我們在@hystrixcommand註解中沒有配置兜底方法,但是最後程式回去執行paymentglobalfallbackmethod方法,這就是預設配置。

如果我們想自定義方法可以重寫在註解中配置自己的兜底方法。

此時還有乙個問題就是兜底方法和呼叫方法出現在一起了,從而導致了**膨脹。

我們可以使用乙個類paymentfallbackservice去繼承我們的feign的客戶端介面,這樣服務降級系統就會自動去呼叫已經實現的方法作為兜底方法。

@component

public

class

paymentfallbackservice

implements

paymenthystrixservice

@override

public string paymentinfo_timeout

(integer id)

}

別忘了在yml中配置:

feign

:hystrix

:enabled

:true

#如果處理自身的容錯就開啟。開啟方式與生產端不一樣。

此時可以直接在@feignclient註解中加乙個屬性fallback設定為我們的實現類。

@component

@feignclient

(value =

"cloud-provider-hystrix-payment"

,fallback = paymentfallbackservice.

class

)public

inte***ce

paymenthystrixservice

微服務Hystrix配置筆記

hystix是netflix開源的乙個延遲和容錯庫,用於隔離訪問遠端服務 第三方庫,防止出現級聯失敗。手段 執行緒隔離,服務降級 通過 fallback method配置 配置步驟 服務呼叫方引入hystix依賴 org.springframework.cloud spring cloud star...

Go Kit 微服務 使用內建http發布服務

文件 安裝 其他的框架 go micro kite go kit工具包集合,幫助開發者靈活自由的建立微服務體系。文件 日誌功能 限流api監控 服務註冊與發現 api網管 服務鏈路追蹤 服務熔斷 transport 主要負責與http grpc thrift等相關的邏輯進行實現 endpoint 定...

Hystrix微服務降級和熔斷

1.微服務降級一般是在客戶端呼叫微服務的時候,出現了服務雪崩的情況,所謂的服務雪崩就是在同乙個tomcat容器中,接受了高併發的訪問,而導致的響應超時,而在整個微服務的專案中,出現了乙個微服務的響應超時而導致的服務雪崩,就會使整個系統崩盤,那麼我們的使用者在傳送請求的時候,返回的響應超時的提示資訊肯...