C# 主机已订阅自己的事件

C# 主机已订阅自己的事件,c#,nservicebus,C#,Nservicebus,我有两个不同的NSB主机(主机A、主机B) 下面是我在两台主机之间发布事件时预期会发生的情况 主持人A发表了我的看法 主机B已订阅队列,并具有ihapped的处理程序。调用IHandleMessages处理程序 完成了 这是给我的 主持我发表的一篇文章 主机B已订阅。。。处理程序被调用 主机A尝试查找处理程序并抛出错误: System.InvalidOperationException: No handlers could be found for message type: SomeAs

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

下面是我在两台主机之间发布事件时预期会发生的情况

  • 主持人A发表了我的看法
  • 主机B已订阅队列,并具有ihapped的处理程序。调用IHandleMessages处理程序
完成了

这是给我的

  • 主持我发表的一篇文章
  • 主机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>

为什么主机A试图处理自己的事件

回答的问题:

  • 两个端点的名称都是唯一的
  • 使用RabbitMq进行传输
  • 有点猜测,但是:

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

    编辑:

    好的,点击1。)

    尽管如此,我认为主持人A还是订阅了我的节目。如果您使用的是Raven,并且知道如何导航其UI,请查看与主机A的端点同名的数据库,并查看订阅集合。查找iHapped消息类型,查看主机A是否已订阅。如果是,您可能必须手动删除它(显然,如果这是生产,请不要在工作时间执行此操作!)


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

    否,两者都有唯一的名称。我将用这些信息更新这个问题。我使用兔子作为传输工具,使用Raven作为持久性工具。目前我还没有传奇故事,所以一切都是在兔子。如何查看谁从Rabbit订阅了队列?订阅存储是持久性的一部分,因此如果您使用的是持久性,它将在Raven中。Rabbit具有本机pubsub支持,因此Raven中的子存储不会发挥作用。使用rabbit管理ui检查rabbit内部的绑定?很有趣——我不知道它对不同的传输有不同的工作方式。