主持人订阅了自己的事件
本文关键字:自己的 事件 主持人 | 更新日期: 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 后再次运行它,并确保它不会因某种原因而重新添加。