我正在尝试在Azure中设置NServiceBus。在本地开发期间,我使用存储队列,当部署在云中时,我使用的是Azure Service Bus。出于某种原因,当发生错误时,消息不会移动到错误队列中。实际上,甚至都没有创建错误队列。
在我的Web.config文件中,我有以下配置:
<MessageForwardingInCaseOfFaultConfig ErrorQueue="myApp-errors"/>
配置NServiceBus时,我打电话:
.MessageForwardingInCaseOfFault()
当邮件失败时,日志中的最后一个错误始终为
Failed raising 'transport message received' event for message with ID=170ad256-b559-417e-8b34-3882045cc19e
对此有何想法?消息传递似乎有效,只是错误处理不起作用。
答案 0 :(得分:3)
我的第一个猜测是,不能创建错误队列,因为不允许名称中的captials
如果这不起作用,我们将不得不进行更彻底的分析,但这需要日志中的更多信息。
希望这有帮助
答案 1 :(得分:0)
我在NServiceBus 3.3上遇到了同样的问题。
这就是为我解决问题的原因。如果Azure队列未标记为事务性,那么NServiceBus甚至不会将消息发送到错误队列 - 它只会消失在以太中。
此外,二级重试不适用于Azure队列 - 您会收到一条警告,说明队列需要与该进程位于同一台计算机上。
因此,如果您不使用.DisableSecondLevelRetries()或此处描述的app.config技术禁用SLR,NServiceBus会将消息转储到重试队列而不是错误队列。
要实现这个目标:
禁用二级重试 确保Azure队列配置为事务性(即使它们不在Azure中)