1、異常處理:調用受熔斷器保護的服務的時候,我們必須要處理當服務不可用時的異常情況。這些異常處理通常需要視具體的業務情況而定。比如,如果應用程序只是暫時的功能降級,可能需要切換到其它的可替換的服務上來執行相同的任務或者獲取相同的數據,或者給用戶報告錯誤然后提示他們稍后重試。
2、異常的類型:請求失敗的原因可能有很多種。一些原因可能會比其它原因更嚴重。比如,請求會失敗可能是由于遠程的服務崩潰,這可能需要花費數分鐘來恢復;也可能是由于服務器暫時負載過重導致超時。熔斷器應該能夠檢查錯誤的類型,從而根據具體的錯誤情況來調整策略。比如,可能需要很多次超時異常才可以斷定需要切換到斷開狀態,而只需要幾次錯誤提示就可以判斷服務不可用而快速切換到斷開狀態。
3、日志:熔斷器應該能夠記錄所有失敗的請求,以及一些可能會嘗試成功的請求,使得的管理員能夠監控使用熔斷器保護的服務的執行情況。 測試服務是否可用:在斷開狀態下,熔斷器可以采用定期的ping遠程的服務或者資源,來判斷是否服務是否恢復,而不是使用計時器來自動切換到半斷開狀態。這種ping操作可以模擬之前那些失敗的請求,或者可以使用通過調用遠程服務提供的檢查服務是否可用的方法來判斷。
手動重置:在系統中對于失敗操作的恢復時間是很難確定的,提供一個手動重置功能能夠使得管理員可以手動的強制將熔斷器切換到閉合狀態。同樣的,如果受熔斷器保護的服務暫時不可用的話,管理員能夠強制的將熔斷器設置為斷開狀態。 并發問題:相同的熔斷器有可能被大量并發請求同時訪問。熔斷器的實現不應該阻塞并發的請求或者增加每次請求調用的負擔。 資源的差異性:使用單個熔斷器時,一個資源如果有分布在多個地方就需要小心。比如,一個數據可能存儲在多個磁盤分區上(shard),某個分區可以正常訪問,而另一個可能存在暫時性的問題。在這種情況下,不同的錯誤響應如果混為一談,那么應用程序訪問的這些存在問題的分區的失敗的可能性就會高,而那些被認為是正常的分區,就有可能被阻塞。
4、加快熔斷器的熔斷操作:有時候,服務返回的錯誤信息足夠讓熔斷器立即執行熔斷操作并且保持一段時間。比如,如果從一個分布式資源返回的響應提示負載超重,那么應該等待幾分鐘后再重試。(HTTP協議定義了”HTTP 503 Service Unavailable”來表示請求的服務當前不可用,他可以包含其他信息比如,超時等)
5、重復失敗請求:當熔斷器在斷開狀態的時候,熔斷器可以記錄每一次請求的細節,而不是僅僅返回失敗信息,這樣當遠程服務恢復的時候,可以將這些失敗的請求再重新請求一次。