NServiceBus:每个事件多次调用事件,多重继承,处理程序

时间:2010-07-27 20:27:45

标签: nservicebus

我遇到一些神秘的问题,每个事件多次调用处理程序,这似乎与通过接口继承构建的事件相关。

我们仅使用接口作为消息,并使用NServiceBus.MessageInterfaces.MessageMapper.Reflection.MessageMapper().CreateInstance()创建要放在总线上的实例。

我们的界面:

IOperationOccured - 包含基本操作信息,此事件的订阅者以相当通用的方式处理事物。此事件永远不会直接引发。

ISpecificOperationOccured - 继承IOperationOccured。包含更具体的信息。此事件的订阅者能够执行更具体的事情,因为事件更具体。

问题在于,当ISpecificOperationOccured被引发时,IOperationOccured的处理程序被调用,ISpecificOperationOccured的处理程序被调用,然后消息似乎再次被处理,调用处理程序试。

我误解了什么?我希望每个事件都会调用IOperationOccured一次的处理程序,并且ISpecificOperationOccured的处理程序每​​个事件都会被调用一次

1 个答案:

答案 0 :(得分:2)

我知道的答案很晚,但希望这会有助于其他人。

当IOperationOccured和ISpecificOperationOccured的单独处理程序部署在同一端点中时,会发生这种情况。 e.g。

  • Endpoint1(提高ISpecificOperationOccured)
  • Endpoint2(处理IOperationOccured和ISpecificOperationOccured)

Endpoint1.Subscriptions将包含以下条目:

  • IOperationOccured - >端点2
  • ISpecificOperationOccured - >端点2

因此,当ISpecificOperationOccured发布时,它将被发送到Endpoint2两次。建议的方法是使用单独的端点来处理不同的消息类型。 e.g。

  • Endpoint1(提高ISpecificOperationOccured)
  • Endpoint2(处理IOperationOccured)
  • Endpoint3(处理ISpecificOperationOccured)