我們有一個蝟(1.4.X)命令看起來像這樣(使用Spring):如何正確處理hystrix後退中的預期錯誤?
@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
return externalService.findXsExternally(xId);
}
事實上,我們不想返回(空)List
從備用方法,而是拋出一個異常所以我們的呼叫者findXs
知道externalService
已關閉,並且可以採取相應的措施。但同時我們希望利用Hystrix提供的功能。在我們的例子中,我們希望調用者返回一個錯誤消息而不是返回一個列表。在春回退中實現這樣的:
public List<X> myFallback(long xId) {
// What to do?? Throw exception!?
}
從myFallback
拋出異常「作品」,但蝟會警告我們說:
command鍵失敗和撤退失敗。
I.e.它會將此解釋爲回退失敗。在我們的案例中,例外情況應該是而不是被解釋爲後備故障,而不是預期的行爲。我們還嘗試在HystrixBadRequestException
中包裝拋出的異常,但它似乎不適用於回退(根據docs,這將適用於「運行」方法)。
如何在Hystrix中實現異常拋出回退方法?我們可以放心地忽略這個警告嗎?還是Hystrix沒有按照這種方式設計作品?
但是,如果您有多個使用@HystrixCommand註解的方法,您如何區分HystrixRuntimeException來自何處?我遇到了問題,我希望根據哪個客戶端具有不同的行爲方式。一個超時,但我唯一知道的是發生了HystrixRuntimeException。 – woezelmann
註釋中有一個名爲** commandKey **的屬性。你可以把它關掉。我只是通過將其設置爲** ckey **來進行測試,並且這裏是處於異常狀態的消息... ** ckey失敗並且後退失敗**。在異常本身中可能還有更多的方法,試試看看 – hyness