C# 主机已订阅自己的事件
我有两个不同的NSB主机(主机A、主机B) 下面是我在两台主机之间发布事件时预期会发生的情况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
- 主持人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
<UnicastBusConfig>
<MessageEndpointMappings />
</UnicastBusConfig>
为什么主机A试图处理自己的事件
回答的问题:
- 两个端点的名称都是唯一的
- 使用RabbitMq进行传输 有点猜测,但是: 端点(以及队列)的名称是否相同?端点需要有唯一的名称 编辑: 好的,点击1。) 尽管如此,我认为主持人A还是订阅了我的节目。如果您使用的是Raven,并且知道如何导航其UI,请查看与主机A的端点同名的数据库,并查看订阅集合。查找iHapped消息类型,查看主机A是否已订阅。如果是,您可能必须手动删除它(显然,如果这是生产,请不要在工作时间执行此操作!)
如果这确实是问题所在,您应该在修复主机A后再次运行它,并确保它不会因为某种原因而被重新添加。否,两者都有唯一的名称。我将用这些信息更新这个问题。我使用兔子作为传输工具,使用Raven作为持久性工具。目前我还没有传奇故事,所以一切都是在兔子。如何查看谁从Rabbit订阅了队列?订阅存储是持久性的一部分,因此如果您使用的是持久性,它将在Raven中。Rabbit具有本机pubsub支持,因此Raven中的子存储不会发挥作用。使用rabbit管理ui检查rabbit内部的绑定?很有趣——我不知道它对不同的传输有不同的工作方式。