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

Exception 如果处理时出现异常,什么可以阻止NServiceBus将消息移动到错误队列?,exception,msmq,nservicebus,Exception,Msmq,Nservicebus,我有一个使用NServiceBus处理消息的应用程序,在调试时,我发现可能会抛出异常,并且消息会丢失。我检查了主队列和错误队列,只尝试了一次消息 是否存在可能导致这种情况发生的常见陷阱 我在Windows7 64位上使用NServiceBus 2.0.0.1219(2.0 RTM)。旧版本上存在相同问题的其他问题: 网站总线。向命令处理程序终结点发送命令 网站配置文件: <MsmqTransportConfig InputQueue="WebAppTest_InputQueue" Err

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

是否存在可能导致这种情况发生的常见陷阱

我在Windows7 64位上使用NServiceBus 2.0.0.1219(2.0 RTM)。旧版本上存在相同问题的其他问题:

网站总线。向命令处理程序终结点发送命令

网站配置文件:

<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>

...
命令处理程序配置文件:

<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>

...

由于消息转发与消息接收是同一事务的一部分,因此如果接收失败,则转发失败。我认为,如果抛出异常,您可能希望它进入错误队列,而不是审核队列,因为它没有被正确接收。如果您想查看所有无需更改的内容,那么最好使用日志记录。

是否可以包括您的管理配置?另外,请确保针对NSB正确安装了MSMQ/DTC。您可以使用下载(tools\MsmqUtils)中的Runner工具确认这一点。MSMQ/DTC安装正确,谢谢您的提示。我在问题中添加了相关的配置文件部分。我想知道这是否与消息转发有关。如果删除“ForwardReceivedMessageTo”,是否仍会发生这种情况?同时,我将尝试设置一个repro。接下来,如果我添加ForwardReceivedMessageTo,我不会丢失错误消息,但我在审核队列中没有得到任何内容。我删除了“ForwardReceivedMessageTo”,同样的行为也会发生:消息尝试一次,记录器记录异常(在命令处理程序中抛出),错误队列仍然为空。