主持人订阅了自己的事件

本文关键字:自己的 事件 主持人 | 更新日期: 2023-09-27 18:32:46

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

以下是我在两个主机之间发布事件时期望发生的情况。

  • 主持人 A 发布 IHapped
  • 主机 B 已订阅队列,并具有 IHappened 的处理程序。将调用 IHandleMessages 处理程序。

做。

这对我来说是什么。

  • 主机 A 发布 IHapped
  • 主机 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 以某种方式订阅了 IHappened。 如果您使用的是 Raven,并且知道如何导航其 UI,请查看与主机 A 的终结点命名相同的数据库,并查看订阅集合。 找到 IHapped 消息类型,查看主机 A 是否已订阅。 如果是,您可能需要手动删除它(显然,如果这是生产,请不要在工作时间执行此操作!

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