2012-03-27 50 views
0

我正在與醫療系統合作(除其他外)將處理患者數據的更新。有沒有辦法控制NServiceBus經銷商如何分配消息?

我們將嘗試將我們的系統擴展到多臺機器以提高性能。

但是,我擔心分發郵件可能導致錯誤順序的更新。

下面是一個例子:

我的MSMQ頂部的兩個消息是對患者的更新請求。第一個將中間名改爲「Bob」,第二個將中間名改爲「Bill」。 (所以最後中間的名字應該是「比爾」。)

我有一個distrubtor設置發送消息給MachineA和MachineB。兩者都能夠處理消息,但MachineA是一臺慢得多的機器(或者其他進程會加載它或由於其他原因而更慢)。

如果分銷商將第一條消息發送給MachineA,將第二條消息發送給MachineB,則MachineB消息將首先完成並將名稱更新爲「Bill」。然後MachineA完成,中間名更新爲「Bob」。

所以我最終以「鮑勃」作爲中間名而不是「比爾」。

我需要一種方法告訴經銷商這兩個消息應該去同一臺機器和同一個線程。邏輯明智的做法並不難,但我需要一種插入分銷商的方式來做到這一點。

我想要做的邏輯將是這樣的:經銷商會保留隊列正在處理的患者ID列表,然後檢查該ID的新消息。如果任何隊列都對標識的工作,然後,要麼等待,直到它完成或只是確保相同的隊列獲取消息。)

或者,確實NServiceBus一些如何確保這些交易將只在提交訂購?(我正在使用分佈式事務。)

+0

是否可以將這些消息打包在您的Bus.Send()中。它需要一個IMessage數組。 – 2012-03-27 18:37:35

+0

@AdamFyles - 我想會是的。這將涉及到我的客戶端(發送數據流)的一些批處理。但我想我可以做到。我已閱讀(在我發佈這個問題之後),使用數組可以使它們保持在同一臺機器和線程上(正是我正在尋找的內容)。如果您發佈將數組作爲答案一起發送的想法,我會接受它。 – Vaccano 2012-03-27 19:31:36

回答

1

當您使用NSB發送()消息時,您可以發送和IMessage數組。這將發送一批將在單個事務處理中處理的消息。消息應按順序處理。

相關問題