如果在处理时有异常,什么可以阻止NServiceBus将消息移动到错误队列?

时间:2010-11-22 15:02:53

标签: exception msmq nservicebus

我有一个使用NServiceBus处理消息的应用程序,在调试时我发现可能会抛出异常,并且消息丢失。我检查了主队列和错误队列,并且只尝试了一次消息。

是否有任何常见的陷阱可能导致这种情况发生?

我在Windows 7 64位上使用NServiceBus 2.0.0.1219(2.0 RTM)。旧版本上同样问题的其他问题: What could prevent NServiceBus from moving messages to the error queue if there are exceptions when processing?

网站Bus.Send命令到命令处理程序端点。

网站配置文件:

<MsmqTransportConfig InputQueue="WebAppTest_InputQueue" ErrorQueue="ErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5"/>

<UnicastBusConfig ForwardReceivedMessagesTo="AuditQueue">
  <MessageEndpointMappings>
    <add Messages="ABC.ServiceBus.Commands" Endpoint="CommandProcessor_InputQueue"/>
  </MessageEndpointMappings>
</UnicastBusConfig>

<DBSubscriptionStorageConfig>
  ...
</DBSubscriptionStorageConfig>

命令处理程序配置文件:

<MsmqTransportConfig InputQueue="CommandProcessor_InputQueue" ErrorQueue="ErrorQueue" NumberOfWorkerThreads="1" MaxRetries="5" />

<UnicastBusConfig ForwardReceivedMessagesTo="AuditQueue">
  <MessageEndpointMappings>
    <add Messages="ABC.ServiceBus.Commands" Endpoint="WebAppTest_InputQueue"/>
  </MessageEndpointMappings>
</UnicastBusConfig>

<DBSubscriptionStorageConfig>
  ...
</DBSubscriptionStorageConfig>

1 个答案:

答案 0 :(得分:1)

由于消息转发是与接收消息相同的事务的一部分,因此如果接收失败,则转发失败。我想如果抛出异常,你可能希望它转到错误队列而不是审计队列,因为它没有被正确接收。如果你想看到无处不在的一切,日记可能是一个更好的选择。