使用NServiceBus的多租户架构

时间:2016-01-20 09:34:53

标签: architecture nservicebus messaging

很抱歉,如果它看起来像一个简单的问题,但我是NServiceBus框架的新手,我仍然想弄清楚一切。我们有一个WCF服务接受一些数据,我们将重定向到一个或几个客户端。每个客户端都有自己的Azure托管环境。

举一个具体的例子,假设我收到了大量订单,我想根据一些标准在我的调度客户端中分发这些订单。假设我有3个客户,根据他们的评级,客户A收到5个订单发送,客户B应该收到4个客户C只收到我必须处理的10个订单中的1个。

我的WCF服务背后有一些智能机制,可以让hocus专注于哪个客户端应该接收哪些订单,但是一旦我确定谁得到了什么,我想将正确的订单发送到表单中的正确端点命令。

每个客户端具有相同的配置:端点侦听相同的命令/事件/消息。我想达到一个点,我已经为数据存储中的特定客户端存储了传输的确切连接字符串,我可以查询它,并将相关的订单发送到他们的队列。

在我在网上找到的示例中,这些信息嵌入在配置中,因此是静态的,而我希望能够访问这些信息并以最小的影响添加调度客户端。关于如何做到这一点的任何想法?

提前致谢!

1 个答案:

答案 0 :(得分: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消息路由功能看起来更有前景,如果这是你的选择。