2012-08-04 123 views
2

我很困惑UnicastBusConfig,MsmqTransportConfig, 和MSMQ队列之间的关系。的文档状态:NServiceBus - 两个发布者,一个订阅者,相同的消息接口

“在用户的总线订阅发布者的方法是 将消息发送到已在其 部被配置的队列”

我是在认为每个校正订户必须包含 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

正如Kijana在nsb列表中提到的,pub pub的核心假设之一是发布者不应该了解其订阅者。甚至可能有0个用户,在你的例子中,这将无法执行ftp传输。这表示你应该做一个总线。发送(SendStuffUsingFtpCommand)代替。 NServiceBus试图通过只允许一个逻辑发布者为给定的消息类型来引导你。从技术上讲,这意味着只有您注意到的每个消息类型的消息映射条目。

+0

bus.Send 完成工作,但感觉不对。它解决了多个发布者针对一个订阅者的问题,但是当您需要多个订阅者时会发生什么?然后你必须恢复到巴士。发布并使用经销商。我想,这很有道理。但发送与发布构造感觉太复杂了。 – znelson 2012-08-06 21:54:20

+1

我相信你在考虑你有多个物理发布者的场景,以获得相同的逻辑消息。想想旧的+新的CRM系统发布相同的CustomerStatusUpdated事件。这是受支持的,只是共享端点之间的订阅存储,并让您将订阅者分配给其中一个(可能是新的CRM) – 2012-08-07 19:58:21

相关问题