【问题标题】:How to throw an exception that forces message to error queue in NServiceBus如何在 NServiceBus 中引发强制消息到错误队列的异常
【发布时间】:2016-12-05 11:42:35
【问题描述】:

在 NServiceBus 中是否有一种方法可以在处理程序中引发异常(或执行其他操作)以避免重试,并自动将消息路由到错误队列?

当正在处理的消息格式正确但具有无效值(如空字符串)时,会出现这种情况。在这种情况下,重试永远不会改变消息的内容,所以重试毫无意义。

谢谢

马特

【问题讨论】:

  • 我个人认为这是对 NServiceBus 错误处理程序的滥用。您应该自己处理错误,如果需要,将其记录到您自己的审计跟踪中。如果您希望 Saga 结束(听起来就是这样),那么也将其标记为完成。

标签: c# nservicebus servicebus


【解决方案1】:

您可能想查看用于创建专门涵盖 NServiceBus 6.0 的 custom recoverability policy 的 API,或者对于早期版本,您可以查看更通用的 recoverability 文章,您可以将其更改为特定版本的 NServiceBus。 (在 NServiceBus 6.0 之前,它并不那么容易配置。)

但是,我想问一下,这些消息是如何以完全无效的状态进入那里的。验证和恢复在技术上是独立的问题。验证逻辑可以与消息程序集类似地共享,并在发送端和接收端运行。然后,当消息在错误队列中结束时要采取的正确操作是更新未预见条件的验证逻辑。

我认为可能不值得构建任何机制来防止重试发生。更好地构建验证以从源头上捕获问题。偶尔会有一条坏消息溜走,但这可能不是世界末日,所以让重试发生吧。

【讨论】:

  • 我同意消息不应该到达那里的前提,但是,我不想在开发处理程序时做出假设。在一个有多个团队一起工作的复杂系统中,我不能保证消息会正确发出。它不是世界末日,因为 FLR 和 SLR 会失败,但感觉不是正确的做法。也许自定义可恢复性策略就是答案 - 我只是希望有一个更简单的解决方案。
  • 最简单的解决办法就是让他们失败。保存几次重试的自定义可恢复性可能是 YAGNI。
猜你喜欢
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多