如何禁止将失败的消息发送到 NServiceBus 的错误队列?

How to disable sending failed messages to the error queue for NServiceBus?

有没有办法禁止将失败的消息发送到 NServiceBus 的错误队列?

对于一个特定端点,我不想在二级重试失败后重试消息。相反,我将使用此处提到的 MessageSentToErrorQueue 错误通知将这些消息挂钩到自定义错误处理解决方案中:Is there a global exception handler for NServiceBus?

如果我省略 MessageForwardingInCaseOfFaultConfig 设置,NSB 将抛出异常。

我可以将它们发送到不受监控的错误队列 (table) 并定期清除它,但如果可能的话我宁愿不这样做。

也许我也可以将 TimeToBeReceived 设置得比 SecondLevel Retries 短,但这似乎也不合适。

我正在使用 NSB 版本 5.2.14 和 SQL 服务器传输 2.2.3。

这将丢弃所有消息

BusConfiguration configuration = new BusConfiguration();
configuration.DiscardFailedMessagesInsteadOfSendingToErrorQueue();

遗憾的是,您仍然需要指定一个错误队列,否则将不会创建端点实例。但我刚刚测试了它,甚至没有创建错误队列。不幸的是,该事件也没有触发。

选项 2:Take a lookIManageMessageFailures。 NServiceBus 存储库中有测试,但这不是我们支持的方案。

选项 3:实施行为 as described here. I haven't tested this and think it's a bit flaky, but catch messages when they're sent to the error queue and abort pipeline execution

不过

请注意,我们付出了很多努力来确保消息被送达,甚至是错误队列。所以要非常确定你想要构建自己的解决方案并覆盖错误队列。我 强烈建议 自己阅读错误队列,处理消息并随心所欲地处理它们。您可以使用从错误队列中获取信息的 NServiceBus 创建另一个端点。这就是我们使用 ServiceControl 所做的。

注意:如果您使用 ServiceControl and/or 错误队列进行常规处理,您应该为此端点指定一个不同的错误队列,以便来自此端点的错误消息不会与您的常规错误混合消息处理。