2

通常,我对 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 功能的发布者进程简单地发布 ISendFile 消息是有意义的。这是我遇到的确切情况-我看不到解决方法。

请指教-谢谢!

4

1 回答 1

4

正如 Kijana 在 nsb 列表中提到的,pub sub 的核心假设之一是发布者不应该了解其订阅者。甚至可能有 0 个订阅者,在您的示例中,从那时起就不会执行任何 ftp 传输。这表明您应该改为执行 bus.Send(SendStuffUsingFtpCommand)。NServiceBus 试图通过只允许给定消息类型的一个逻辑发布者来引导您走这条路。从技术上讲,这意味着每个消息类型只有一个消息映射条目,正如您所注意到的那样。

于 2012-08-04T20:41:32.327 回答