NServiceBus - 两个发布者,一个订阅者,相同的消息接口

时间:2012-08-04 01:29:16

标签: nservicebus

我对UnicastBusConfig,MsmqTransportConfig之间的关系感到困惑, 和MSMQ队列一般。文档声明:

“订阅者的总线订阅发布者的方式是 将消息发送到已在其中配置的队列  部“

我相信每个订阅者必须包含一个 MessageEndpointMapping回到每个发布者的端点(或队列) 可能会发布订阅者处理的消息吗?

如果是这种情况,那么如何配置多个 MessageEndpointMapping是否为相同的消息类型?您不能拥有重复的值。

例如,给定MyAssembly.IDoStuff,假设我有两个发布者 IDoStuff和一个订阅者:

<UnicastBusConfig>
   <MessageEndpointMappings>
      <add Messages="MyAssembly" Endpoint="Publisher1" />
      <add Messages="MyAssembly" Endpoint="Publisher2" /> <-- runtime exception
   </MessageEndpointMappings>
</UnicastBusConfig>

这方面的商业案例很简单。假设订阅者是一个FTP进程,它接收文件和FTP。显然,您希望从整个企业的许多地方使用该功能。因此,有一个处理ISendFile的FTP订阅者然后让需要FTP功能的每个Publisher进程只发布ISendFile消息是有意义的。这是我遇到的确切情况 - 我没有看到解决方法。

请指教 - 谢谢!

1 个答案:

答案 0 :(得分:4)

正如Kijana在nsb列表中提到的,pub sub的一个核心假设是发布者不应该知道其订阅者。甚至可能有0个订阅者,在您的示例中,从那时起不会执行任何ftp传输。这是一个标志,你应该做一个bus.Send(SendStuffUsingFtpCommand)而不是。 NServiceBus尝试通过仅允许给定消息类型的一个逻辑发布者来引导您沿着该路径前进。从技术上讲,这意味着只有您注意到的每个消息类型的一个消息映射条目。