我有一个使用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>
答案 0 :(得分:1)
由于消息转发是与接收消息相同的事务的一部分,因此如果接收失败,则转发失败。我想如果抛出异常,你可能希望它转到错误队列而不是审计队列,因为它没有被正确接收。如果你想看到无处不在的一切,日记可能是一个更好的选择。