主持人订阅了自己的活动

时间:2014-12-01 21:33:59

标签: c# nservicebus

我有两个不同的NSB主机(主机A,主机B)

这是我在两台主机之间发布事件时所期望的事情。

  • 主持人A发布IHappened
  • 主机B订阅了队列并拥有IHappened的处理程序。调用IHandleMessages处理程序。

完成。

这是我的最新消息。

  • 主持人A发布IHappened
  • 订阅主机B ...调用处理程序
  • 主机A尝试查找处理程序并抛出错误:

    System.InvalidOperationException: No handlers could be found for message type: SomeAssembly.Messages.Events.IHappened
       at NServiceBus.LoadHandlersBehavior.Invoke(IncomingContext context, Action next) in c:\BuildAgent\work\1b05a2fea6e4cd32\src\NServiceBus.Core\Unicast\Behaviors\LoadHandlersBehavior.cs:line 31
       at NServiceBus.BehaviorChain1.Invoke() in c:\BuildAgent\work\1b05a2fea6e4cd32\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 39
       at NServiceBus.ApplyIncomingMessageMutatorsBehavior.Invoke(IncomingContext context, Action next) in c:\BuildAgent\work\1b05a2fea6e4cd32\src\NServiceBus.Core\MessageMutator\ApplyIncomingMessageMutatorsBehavior.cs:line 23
       at NServiceBus.BehaviorChain1.Invoke() in c:\BuildAgent\work\1b05a2fea6e4cd32\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line 3
    

主机A的配置不引用自己的队列,所以我很困惑为什么它试图处理事件。

  <UnicastBusConfig>
    <MessageEndpointMappings />
  </UnicastBusConfig>

为什么Host A会尝试处理自己的事件?

回答的问题:

  • 两个端点都以唯一名称
  • 命名
  • 使用RabbitMq进行传输

1 个答案:

答案 0 :(得分:1)

有点猜测,但是:

您的端点(以及队列)的名称是否相同?您的端点需要具有唯一的名称。

编辑:

好的,打1:)

尽管如此,我认为Host A以某种方式订阅了IHappened。如果您正在使用Raven,并且知道如何导航其UI,请查看名为与Host A的端点相同的数据库,并查看Subscription集合。找到IHappened MessageType并查看主机A是否已订阅。如果是,您可能需要手动删除它(显然,如果这是生产,请不要在工作时间执行此操作!)。

如果这确实是问题,您应该在修复后再次运行Host A并确保它不会因某种原因重新添加。