如何防止NServiceBus不发送错误消息

问题描述 投票:0回答:1

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

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

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

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

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

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

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

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

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

提前致谢。

nservicebus
1个回答
2
投票

如何将程序代码分解为单独的处理程序?此后,基于每个粒度任务的成功完成,将完成或不完成每个逻辑操作。

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

也许可以阅读更多关于交易和NServiceBus here

© www.soinside.com 2019 - 2024. All rights reserved.