2016-01-20 58 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

好,很好。很高兴我能帮上忙。 –