首页 > 解决方案 > 如何防止 NServiceBus 不发送错误消息

问题描述

我是 NServiceBus 的新手,所以也许我在这里问了一些非常愚蠢的问题,但是有没有办法让 NServiceBus 不停止发送响应处理程序失败的消息而发送的任何消息?

让我用一个简单的例子来解释。

假设我有一个OrderPaidEvent具有执行以下操作的处理程序:

  1. 寻找客户
  2. 启动数据库事务
  3. 将客户更新为好客户
  4. 发送CustomerUpgradedToGoodCustomerEvent消息
  5. 提交数据库事务

相当简单,世界上一切都很好。现在几个月后,其他人认为支付订单时发送电子邮件会很好,因此添加了另一个处理程序来OrderPaidEvent发送电子邮件。

不幸的是,现在每当邮件服务器出现问题时,第二个处理程序都会失败并出现错误,但会阻止CustomerUpgradedToGoodCustomerEvent发送原始消息(步骤 4)。但是因为 DB 事务已经提交(第 5 步),所以客户已经升级为数据库中的好客户。

这意味着即使OrderPaidEvent重试处理程序,客户也不会再更改,因此CustomerUpgradedToGoodCustomerEvent永远不会发送消息。更糟糕的是,这完全是因为对代码的更改与原始消息处理程序无关,因此很难检测到。

这似乎是一个巨大的缺陷,因为我是新手,所以我确定我做错了什么,但我似乎无法弄清楚它是什么。

你们这些好人的任何帮助都会很棒。

提前致谢。

标签: nservicebus

解决方案


将您的程序代码分解为单独的处理程序怎么样?此后,基于每个细粒度任务的成功完成,每个逻辑操作要么完成,要么不完成。

如果您将Saga添加到组合中,那么您可以根据 Saga 中已完成的步骤做出业务决策。

也可以在此处阅读有关事务和 NServiceBus的更多信息


推荐阅读