【发布时间】:2016-09-09 22:33:54
【问题描述】:
NServiceBus 是否在任何时候出于任何原因都必须将 empty 消息发布到 MSMQ,如果是,为什么以及何时发生?下面有更详细的解释。
我从事的一个项目使用了 NServiceBus 版本 4。该版本不允许在单个进程中为不同队列“多托管”事件处理程序,如果您的项目包含 40 个左右不同的队列,这可能会很不方便。
为了克服开发中的这个问题,我制作了一个小型“路由器”应用程序,它侦听所有必要的 MSMQ 队列,并将来自它们的所有消息简单地转发到一个“统一”队列中。该“统一”队列被指定为“统一端点”进程的队列名称,该进程引用了通常从这些不同队列处理的所有消息的所有处理程序。
这种设置似乎有效(至少对于大多数处理程序而言),但有一种神秘的行为(我认为这可能与设置有关不 与其他一些处理程序一起工作)。也就是说,一旦项目启动,我的“路由器”会立即发现许多空的 MSMQ 消息发布到它必须侦听的队列中。显然,NSB 出于某种原因在启动期间发布了这些消息(并且很可能路由器在 NSB 有机会再次查看它们之前将它们告发)。
我确信这不是我实施的人工制品,因为除非 NSB 也启动,否则不会发生这种情况。我很好奇其中的原因。
【问题讨论】:
标签: nservicebus msmq esb