【发布时间】: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