Architecture 使用NServiceBus的多租户体系结构

Architecture 使用NServiceBus的多租户体系结构,architecture,nservicebus,messaging,Architecture,Nservicebus,Messaging,抱歉,如果这看起来是一个简单的问题,但我对NServiceBus框架还不熟悉,我仍在尝试解决所有问题。我们有一个WCF服务,它接受一些数据,我们会将这些数据重定向到一个或多个客户端。每个客户端都有自己的托管在Azure上的环境 举一个具体的例子,假设我收到一大堆订单,我想根据一些标准在我的调度客户机之间分发这些订单。假设我有3个客户,根据他们的评级,客户A收到5个要发送的订单,客户B应该收到4个,客户C只收到我必须处理的10个订单中的1个 在我的WCF服务背后,我有某种智能机制,它执行hocus

抱歉,如果这看起来是一个简单的问题,但我对NServiceBus框架还不熟悉,我仍在尝试解决所有问题。我们有一个WCF服务,它接受一些数据,我们会将这些数据重定向到一个或多个客户端。每个客户端都有自己的托管在Azure上的环境

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

在我的WCF服务背后,我有某种智能机制,它执行hocus pocus,在哪个客户机上应该接收哪些订单,但一旦我决定了谁得到了什么,我想以命令的形式将正确的订单发送到正确的端点

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

在我在web上找到的示例中,这些信息嵌入在配置中,因此是静态的,而我希望能够访问这些信息并添加影响最小的分派客户端。有什么办法吗


提前谢谢

NSB版本6引入了一种新的高级消息路由机制,这可能正是您需要的:

在版本6之前,您可以在运行时指定接收端点名称:

bus.Send("myendpoint", new MyMessage());
这对于命令来说很好,但是事件可能会有点棘手,因为其他端点向您订阅,而您作为发布者通常不知道它们的存在。对于这种情况,可以使用消息版本控制作为解决方法。您可以设置基本事件类型,例如:

public interface BaseOrderEvent { ... }
然后,对于每个特定于客户端的事件,您可以创建一个新的事件类型:

public interface Client1OrderEvent : BaseOrderEvent { ... }
最后,在发布代码中,通过简单的switch语句或可能使用反射发布特定于客户端的事件


这不是最优雅的解决方案,但如果您只有几个适用于此的客户机,它可能是一个解决方案。总的来说,如果您愿意的话,我认为版本6的邮件路由功能看起来更有前景。

非常感谢!实际上,文档中描述的动态路由看起来是我问题的完美答案。我会尝试一下,完成后会带着更多信息回来!好的,太好了。很高兴我能帮忙。