使用 NServiceBus 的多租户架构
Multi-tenant architecture using NServiceBus
抱歉,这似乎是一个简单的问题,但我是 NServiceBus 框架的新手,我仍在努力弄清楚所有问题。我们有一个接受一些数据的 WCF 服务,我们将把这些数据重定向到我们的一个或多个客户。每个客户端都有自己的环境托管在 Azure 上。
举一个具体的例子,假设我收到了一大堆订单,我想根据一些标准在我的调度客户端中分发这些订单。假设我有 3 个客户,根据他们的评级,客户 A 收到 5 个订单要发货,客户 B 应该收到 4 个,而客户 C 只收到我必须处理的 10 个订单中的 1 个。
我的 WCF 服务背后有某种智能机制,可以确定哪个客户端应该接收哪些订单,但是一旦我决定谁得到什么,我想将正确的订单发送到正确的端点命令的形式。
每个客户端都具有相同的配置:侦听相同 commands/events/messages 的端点。我想达到这样的程度,即我已经在数据存储中存储了特定客户端传输的确切连接字符串,我可以查询它,并将相关订单发送到他们的队列。
在我在网上找到的示例中,此信息嵌入在配置中,因此有点静态,而我想访问此信息并添加调度客户端,影响最小。关于如何做到这一点的任何想法?
提前致谢!
NSB 版本 6 引入了一种新的高级消息路由机制,这可能是您正在寻找的:
http://docs.particular.net/nservicebus/messaging/routing
在版本 6 之前,您可以在运行时指定接收端点名称:
bus.Send("myendpoint", new MyMessage());
这适用于命令,但事件可能有点棘手,因为其他端点订阅了您,而您作为发布者通常不知道它们的存在。对于这种情况,您可以使用消息版本控制作为解决方法。您将设置一个基本事件类型,例如:
public interface BaseOrderEvent { ... }
然后对于每个特定于客户的事件,您可以创建一个新的事件类型:
public interface Client1OrderEvent : BaseOrderEvent { ... }
最后,在您的发布代码中,您通过简单的 switch 语句或可能使用反射来发布客户端特定事件。
这不是最优雅的解决方案,但如果您只有几个适用于此的客户端,它可能是一种解决方法。总的来说,我认为版本 6 的消息路由功能看起来更有前途,如果您愿意的话。
抱歉,这似乎是一个简单的问题,但我是 NServiceBus 框架的新手,我仍在努力弄清楚所有问题。我们有一个接受一些数据的 WCF 服务,我们将把这些数据重定向到我们的一个或多个客户。每个客户端都有自己的环境托管在 Azure 上。
举一个具体的例子,假设我收到了一大堆订单,我想根据一些标准在我的调度客户端中分发这些订单。假设我有 3 个客户,根据他们的评级,客户 A 收到 5 个订单要发货,客户 B 应该收到 4 个,而客户 C 只收到我必须处理的 10 个订单中的 1 个。
我的 WCF 服务背后有某种智能机制,可以确定哪个客户端应该接收哪些订单,但是一旦我决定谁得到什么,我想将正确的订单发送到正确的端点命令的形式。
每个客户端都具有相同的配置:侦听相同 commands/events/messages 的端点。我想达到这样的程度,即我已经在数据存储中存储了特定客户端传输的确切连接字符串,我可以查询它,并将相关订单发送到他们的队列。
在我在网上找到的示例中,此信息嵌入在配置中,因此有点静态,而我想访问此信息并添加调度客户端,影响最小。关于如何做到这一点的任何想法?
提前致谢!
NSB 版本 6 引入了一种新的高级消息路由机制,这可能是您正在寻找的:
http://docs.particular.net/nservicebus/messaging/routing
在版本 6 之前,您可以在运行时指定接收端点名称:
bus.Send("myendpoint", new MyMessage());
这适用于命令,但事件可能有点棘手,因为其他端点订阅了您,而您作为发布者通常不知道它们的存在。对于这种情况,您可以使用消息版本控制作为解决方法。您将设置一个基本事件类型,例如:
public interface BaseOrderEvent { ... }
然后对于每个特定于客户的事件,您可以创建一个新的事件类型:
public interface Client1OrderEvent : BaseOrderEvent { ... }
最后,在您的发布代码中,您通过简单的 switch 语句或可能使用反射来发布客户端特定事件。
这不是最优雅的解决方案,但如果您只有几个适用于此的客户端,它可能是一种解决方法。总的来说,我认为版本 6 的消息路由功能看起来更有前途,如果您愿意的话。