我遇到一些神秘的问题,每个事件多次调用处理程序,这似乎与通过接口继承构建的事件相关。
我们仅使用接口作为消息,并使用NServiceBus.MessageInterfaces.MessageMapper.Reflection.MessageMapper().CreateInstance()
创建要放在总线上的实例。
我们的界面:
IOperationOccured
- 包含基本操作信息,此事件的订阅者以相当通用的方式处理事物。此事件永远不会直接引发。
ISpecificOperationOccured
- 继承IOperationOccured
。包含更具体的信息。此事件的订阅者能够执行更具体的事情,因为事件更具体。
问题在于,当ISpecificOperationOccured
被引发时,IOperationOccured
的处理程序被调用,ISpecificOperationOccured
的处理程序被调用,然后消息似乎再次被处理,调用处理程序试。
我误解了什么?我希望每个事件都会调用IOperationOccured
一次的处理程序,并且ISpecificOperationOccured
的处理程序每个事件都会被调用一次。
答案 0 :(得分:2)
我知道的答案很晚,但希望这会有助于其他人。
当IOperationOccured和ISpecificOperationOccured的单独处理程序部署在同一端点中时,会发生这种情况。 e.g。
Endpoint1.Subscriptions将包含以下条目:
因此,当ISpecificOperationOccured发布时,它将被发送到Endpoint2两次。建议的方法是使用单独的端点来处理不同的消息类型。 e.g。