在NServiceBus中有一種方法可以在避免重試的處理程序中引發異常(或者做其他事情),並自動將消息路由到錯誤隊列?如何拋出一個異常,強制消息到NServiceBus中的錯誤隊列
正在處理的消息形成正確,但具有無效值(如空字符串)時的用例。在這種情況下,重試永遠不會改變消息的內容,因此重試毫無意義。
感謝
馬特
在NServiceBus中有一種方法可以在避免重試的處理程序中引發異常(或者做其他事情),並自動將消息路由到錯誤隊列?如何拋出一個異常,強制消息到NServiceBus中的錯誤隊列
正在處理的消息形成正確,但具有無效值(如空字符串)時的用例。在這種情況下,重試永遠不會改變消息的內容,因此重試毫無意義。
感謝
馬特
您可能要檢查出的API創建custom recoverability policy其具體包括NServiceBus 6.0或更早版本中,更通用recoverability文章,你可以改變你的具體版本的NServiceBus。 (在NServiceBus 6.0之前,配置並不是那麼容易)。
但是,我會問這些消息是如何在一個完全無效的狀態中進入的。驗證和恢復在技術上是獨立的問題。驗證邏輯可以與消息程序集類似,並在發送方和接收方運行。然後,當錯誤隊列中出現消息時,正確的操作是更新驗證邏輯以預測不可預見的情況。
我認爲這可能是不值得建立任何機制來防止重試發生。更好地構建驗證以從源頭上解決問題。一段時間後,一條不好的消息就會溜走,但它可能不是世界的盡頭,所以只要讓重試發生即可。
我同意的前提是,消息*不應該達到那裏,但我不想在開發處理程序時作出假設。在一個擁有多個團隊的複雜系統中,我無法保證消息能夠正確提升。它不是世界的盡頭,因爲FLR和SLR會失敗,但它不適合做正確的事情。也許定製的可恢復性策略就是答案 - 我只是希望有一個更簡單的解決方案。 –
最簡單的解決方案是讓它們失敗。定製可恢復性以節省幾次重試可能是YAGNI。 –
我個人認爲這是對NServiceBus錯誤處理程序的誤用。您應該自己處理錯誤,並根據需要將其記錄到自己的審計跟蹤中。如果你想讓佐賀結束(聽起來像你這樣做),那麼也應該標記爲完整。 – Archer