Hystrix失敗處理邏輯解析

2021-09-29 05:43:08 字數 1293 閱讀 4551

熔斷器開啟

執行緒池/訊號量跑滿

呼叫超時

呼叫失敗

final func1> handlefallback = new func1>()  else if (t instanceof hystrixtimeoutexception)  else if (t instanceof hystrixbadrequestexception)  else 	

return handlefailureviafallback(e);

} }

};

這裡我們拿執行緒池跑滿的邏輯來進行分析

執行緒池跑滿

private observablehandlethreadpoolrejectionviafallback(exception underlying)

第一行發布了乙個執行緒池拒絕的事件

第二行記錄了執行緒池拒絕的次數

獲取fallback方法

獲取fallback方法

方法比較長,主要做了以下事情:

直接看isunrecoverable方法,判斷異常是否為不可恢復異常,如果不可恢復則直接返回失敗

如果是可恢復異常則列印日誌

判斷是否開啟執行回退方法,如果開啟進入步驟4

建立開始和完成需要傳送的兩個事件:fallback_emitfallback_success

建立呼叫回退方法出現異常時的處理邏輯:handlefallbackerror,而這種場景發生的異常只有兩種情況:

unsupportedoperationexception異常:未實現getfallback抽象方法

其他異常

建立釋放訊號量的action:singlesemaphorerelease

獲取訊號量,如果成功執行回退邏輯,也就是呼叫使用者實現的getfallback方法

final protected observablegetfallbackobservable()  catch (throwable ex) 	

} });

}

對於其他異常型別的處理感興趣的同學可以繼續基於func1handlefallback研究

hystrix的區域性降級邏輯的處理方式

一般服務降級放在消費端,即 消費者端 但是提供者端一樣能使用。首先提供者,即8001 先從自身找問題,設定自身呼叫超時的峰值,峰值內正常執行,超出峰值需要有兜底的方法處理,作服務降級fallback 1 在8001服務提供方引入hystrix依賴 org.springframework.cloud ...

8 22 Hystrix快速失敗與降級

演示failback,只需要在這裡覆蓋乙個方法就可以了。這樣我們的failback就算是寫完了。觸發降級 執行這個測試方法 t4和t5正常執行。前面三個觸發了failback failback和run方法是一一對應的 至於這個hystrixbadrequestexception會被丟擲異常,其他的異...

SpringMVC 邏輯解析

寫在前面 這篇文章只是我對springmvc的理解,細節會理解的不到位,後面會慢慢修改。springmvc的作用 springmvc就是在接到url請求的時候,根據請求將其對映到對應的處理方法上面去。在方法處理結束後,根據返回的值,返回正確的頁面。具體步驟 1.1 spring容器收集到所有的con...