2010-07-07 65 views
1

我試圖使用EDA和NServiceBus分離兩個應用程序。目前,我有銷售MT和庫存MT。無論何時通過銷售MT請求銷售,在批准之前,銷售MT將調用庫存MT以確保存在可用庫存。我想改變它的工作方式,這樣Sales MT會自動批准它,併發布異常「SaleCreated」事件,Inventory MT和Billing MT將訂閱此事件。如果有缺貨項目,庫存MT可以在脫機過程中標記銷售。使用NServiceBus擴展訂戶的擴展出版物

我的問題是我有10個銷售MT實例,5個我的庫存MT實例和3個我的Billing MT實例。所有3個應用程序都在位於10/5/3服務器前的LoadBalancer上擁有自己的虛擬IP。所以基本上我有1個虛擬出版物(SaleCreated events)和2個虛擬訂閱(Inventory and Billing訂閱者)。理想情況下,由Sales MT處理的銷售應該創建一個SaleCreated事件消息,發送給1,並且僅發送1個庫存MT,以及1個並且僅發送一個Billing MT。我真的很困惑這將如何工作,因爲我沒有在NServiceBus網站上看到這種情況的例子。另外,我不希望每個訂閱都將所有消息發送給單個分發服務器,因爲這會導致一臺計算機成爲瓶頸。

有沒有辦法做到這一點?

回答

1

在發佈方面,您需要使用數據庫訂閱存儲選項(在生產配置文件中找到),以便所有發佈實例都可以看到相同的訂閱者列表。在訂閱方面,您可以使用分發者來分發進入的事件負載,以便每條消息僅派發到單個實例。請注意,您會爲每個訂閱者使用一個分發服務器,因此沒有真正的瓶頸,分發服務器也不會做任何實際的工作,所以這不是什麼問題。

+0

謝謝,Udi。這有幫助。我有一些後續步驟: 1.您在「製作配置文件」中找到的意思是什麼 2.如何在訂閱數據庫中獲得發佈實例的新訂閱者通知,似乎每次檢查都會很糟糕。 3.好像還有更好的分發訂閱方式。有了這個,您可以通過發佈者生成的每條消息都通過一個盒子發送(即使您有100個發佈框)。 – skb 2010-07-13 02:15:25

+0

要詳細瞭解配置文件(特別是生產配置文件),請訪問http://www.nservicebus.com/Profiles.aspx 使用數據庫時,發佈者實例無需瞭解新訂戶 - 他們在每次發佈時訪問數據庫。 如果你不想讓所有的分銷商在同一個盒子上,那就把它們放在不同的盒子上。您通常基於消息類型進行分區,因此您可以輕鬆地爲每個消息類型分配一個分發路由。 – 2010-07-14 15:32:50

+0

因此,每一次發佈都需要往返訂閱數據庫? – skb 2010-07-14 22:38:54