【问题标题】:Does an NServiceBus error mean that messages are not processed in the right order?NServiceBus 错误是否意味着消息未按正确顺序处理?
【发布时间】:2018-05-22 08:36:23
【问题描述】:

假设我有一个银行应用程序(我不是在开发银行应用程序,但我相信它可以理解我的观点,因为它在很多事件溯源示例中都有使用),它会生成以下消息:

1) Apply £110 withdrawal to account A
2) Apply £70 credit to account A
3) Apply £99 withdrawal to account A
4) Apply £42 withdrawal to account A

假设账户 A 没有透支。现在说第三条消息由于特定于该消息的错误而失败,例如序列化错误。在这种情况下,消息 3 被添加到 NServiceBus 错误队列中。

我的理解是管理员使用像 Service Pulse 这样的工具来单独处理错误队列。假设管理员需要两个小时来处理错误,并且在这段时间内完成第四次事务。这是否意味着第四笔交易在第三笔交易之前处理,账户可以透支?

我已经完成了 NServiceBus 的在线课程,但我仍然不清楚这一点。我也在这里查看过类似的问题,例如:In CQRS how to work with NServiceBus to update Command and Query store

【问题讨论】:

  • 每笔交易都是独立的。并且不应该假设消息的顺序。你在这里谈论分类帐。我假设只要重试并应用失败的操作,#4 是在 #3 之前还是之后执行都没有关系。
  • @Sean Feldman,如果出现透支怎么办?谢谢。
  • 有一种感觉,透支不是按几个小时计算的,而是资金不足的较长时期。我会首先寻求了解透支是如何运作的。
  • @Sean Feldman,您将如何阻止某人透支?我猜银行不会阻止你——如果你透支,他们只会向你收费。对吗?
  • 我不是在与银行系统打交道以了解它是如何运作的。我敢肯定,这不仅仅是您列出的一个边缘案例。例如,当 ATM/分支机构之间没有连接时会发生什么?如果我需要在银行领域构建解决方案,我会尝试尽可能多地了解已经存在的规则。

标签: c# nservicebus


【解决方案1】:

这是个好问题。作为这些事件来源的系统在天平上具有权威性。银行“核心”是一个更传统的分类账,有两阶段提交(无论如何我见过的大多数都有一个每晚的循环过程来确定你是否透支)。这个核心系统可以发布信息交易和其他可以转换成 NServiceBus 的东西。有了这个,你可以做各种有用的事情,比如发送文本警报、通知另一个系统这个活动、订阅欺诈预警系统、订阅奖励平台以累积奖励积分等。

正如您所说,由于错误,事件的顺序可能会失控。这是异步消息传递和存储转发的现实。每个接收系统都必须应对这一现实。如果有时间戳,您可以通过时间戳在目的地重新订购它们,但您不能确定在任何给定时间都拥有它们。

关于透支条件,考虑它的最佳方法是将其作为与权威核心分开的事件。它是唯一知道并可以推送“帐户透支”事件的系统,这种事件本身可能会触发通知、费用、给分行经理的通知……

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 2013-09-11
    • 2011-09-15
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多