2011-10-19 83 views
1

對不起,我不清楚。事實上,處理程序之間沒有任何依賴關係,其中一些只處理相同類型的消息。例如,在我們的系統中,我們處理的發票,非常簡化這種情況發生時的發票到達系統:一個「InvoiceArrived」消息被髮送到nservicebus和兩件事情應該發生,關於發票的信息應該被髮送到外部系統和應該將電子郵件發送給要處理髮票的人(根據發票上的信息不同的人)。這兩件事對彼此沒有依賴性,但對外部系統的導出非常重要,而電子郵件則不那麼重要。NServicebus和消息處理順序

事情是這樣的處理程序發送電子郵件已運行第一和它crached(由於惡劣的配置),它被重試五次,但每次既不電子郵件,也沒有出口到外部系統crached發生。修復配置很簡單,但是它在我們的設計中給我們帶來了一個缺陷。

我現在已經意識到我們必須重新考慮設計,因爲指定處理程序的運行順序並不能解決任何問題,因爲相反的情況也是不可取的,它首先運行導出處理程序,然後在電子郵件中運行處理程序導致五次重試和五次成功導出(但沒有成功的電子郵件)。我想我們將要發送一個消息類型爲每個處理器...

原始郵件:

我們正在使用NServiceBus建立處理程序的一些事件,每發送一個唯一的消息類型總線(目前6個,但數量正在增長)。其中一些事件(目前是2個)有多個處理程序,我們希望它們按照每種消息類型的特定順序執行。

我們有我們自己的主機,我知道你可以爲指定的順序: NServiceBus.Configure.With() ... .UnicastBus() .LoadMessageHandlers(First.Then()AndThen()。假設我們有相應的H2_1,H2_2(處理類型2的消息)和H3-H6的消息處理程序H1_1,H1_2(都處理類型1的消息H1_1在H1_2之前執行) (僅處理類型3-6的消息)

當然,我們可以通過指定所有處理程序來管理此操作

.LoadMessageHandlers(First<H1_1>.Then<H1_1>().Then<H2_1>() //etc) 

但這意味着我們每次添加一個新的處理程序,我們必須添加配置,

是有可能寫

.LoadMessageHandlers(First<H1_1>.Then<H2_1>()) //and all the other handlers are run there after? 

那當然會更好,但仍, H1_1和H2_1與對方沒有任何關係,並且不會以任何方式在同一條消息上運行。有沒有辦法每個消息類型來指定,即對於類型1和First<H1_1>.Then<H1_2>() 2型First<H2_1>.Then<H2_2>()和用於所有其它類型的不規範是必要的,因爲僅存在一個處理程序?

非常感謝你提前 - 任何幫助將不勝感激!

+0

,你有你的處理程序之間許多依賴性可能是您的設計需要一些調整的跡象,這一事實。你能否給我們詳細說明這些處理程序在做什麼,以及爲什麼它們執行的順序很重要? –

+0

它也聽起來像你可能會受益於將每組消息類型移動到不同的端點。這可以讓你按不同的順序排列,但我同意Andreas,這聽起來像我們需要更多的細節。 –

回答

1

在3.0版本中,我們要支持ISpecifyMessageHandlerOrdering的多個實現了整整這些原因。

相關問題