2011-10-20 85 views
0

我們使用NServiceBus來處理一些消息類型。在nservicebus.com上他們說我們不應該處理異常,因爲NServiceBus會照顧到這一點。現在我們的問題是:如果我們有兩個消息處理程序都處理相同類型的消息,並且其中一個處理程序有異常 - 是否可以讓NServiceBus處理此異常(重試和日誌),但即使重試失敗我們仍然想要運行其他處理程序?或者這是否意味着我們必須處理第一處理程序中的自我處理異常,以確保第二處理程序始終運行?Nservicebus異常處理

感謝

/基督教

澄清:

的簡化版本我們的情景:我們的系統,我們處理的發票,在發票改變狀態的「InvoiceStatusChanged」消息被髮送到nservicebus和應該發生兩件事情,一封郵件應該發送到隊列中,並且一封電子郵件應該發送給接下來要處理髮票的人。這兩件事對彼此沒有依賴性。

也許我們在我們的設置中犯了一些錯誤,因爲如果處理程序先寫入消息到隊列中,然後電子郵件處理程序在每次重試時崩潰,那麼我們最終會在隊列中發出5條消息。

我們正在重新設計,以便狀態更改事件發送到總線上兩個不同的消息,並且每個處理器將處理單獨爲messageType。

感謝

/基督教

+1

隨着聽起來像一個破紀錄的風險:)這是設計的味道,你可以給我們你正在試圖解決的業務問題多一些投入? –

回答

4

整個消息處理管道事務邊界內。如果任何處理程序失敗,則整個事務回滾。感覺就像你總是希望第二個處理程序運行一樣,感覺應該有兩個不同的消息,因此有兩個不同的事務,另一個終結點中的不同處理程序也會將它們分開,或者您希望Saga處理工作流。