2016-01-20 82 views
1

對不起,如果它看起來像一個簡單的問題,但我是新來的NServiceBus框架,我仍然試圖找出一切。我們有一個接受一些數據的WCF服務,我們將重定向到我們的一個或幾個客戶端。每個客戶都有自己的環境託管在Azure上。使用NServiceBus的多租戶架構

舉一個具體的例子,假設我收到了一大堆訂單,並且我想根據一些標準將這些訂單分發給我的調度客戶端。假設我有3個客戶,根據他們的評價,客戶A收到5份訂單,客戶B收到4,客戶C只收到我必須處理的10份訂單中的1份。

我在我的WCF服務後面有一些智能機制,它可以讓客戶端接收哪些訂單,但是一旦我決定了誰獲得什麼,我想將正確的訂單發送到命令形式。

每個客戶端都具有相同的配置:一個端點監聽相同的命令/事件/消息。我想得到一個點,我已經爲數據存儲中的特定客戶端存儲了transport的確切連接字符串,並且我可以查詢它,並將相關訂單發送到其隊列。

在我發現的Web上的例子中,這些信息嵌入到配置中,因此是靜態類型,而我想訪問這些信息並以最小的影響添加調度客戶端。任何想法如何做到這一點?

提前致謝!

回答

2

NSB第6版引入了先進的消息路由的新機制,這可能是你在找什麼:

http://docs.particular.net/nservicebus/messaging/routing

此前6版本,您必須指定接收端點名的能力運行時間:

bus.Send("myendpoint", new MyMessage()); 

這工作得很好了命令,但由於其他端點訂閱你,你作爲發行者通常並不知道他們存在的事件可能是一個小更棘手。對於這種情況,您可以使用消息版本作爲解決方法。你會建立一個基地事件類型,如:

public interface BaseOrderEvent { ... } 

然後針對每個客戶的具體情況,你可以做一個新的事件類型:

public interface Client1OrderEvent : BaseOrderEvent { ... } 

最後在出版的代碼,你發佈特定的客戶端事件通過一個簡單的switch語句或可能使用反射。

不是最優雅的解決方案,但它可能是一個解決方法,如果你只有少數客戶這將適用於。總的來說,我認爲第6版消息路由功能看起來更有希望,如果這是您的選擇。

+0

非常感謝!實際上,文檔中描述的動態路線看起來像是對我的問題的完美回答。我會嘗試一下,在完成後再回來,提供更多信息! – Laila

+0

好,很好。很高興我能幫上忙。 –