NServiceBus错误是否意味着消息未按正确顺序处理?

假设我有一个银行应用程序(我不是在开发一个银行应用程序,但我相信它可以解决我在许多事件采购示例中使用的问题),它会生成以下消息:

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的在线课程,我仍然不清楚这一点。 我在这里也看了类似的问题,例如: 在CQRS中如何使用NServiceBus来更新Command和Query存储

这是一个很好的问题。 作为这些事件来源的系统在余额方面具有权威性。 银行“核心”是一个更传统的分类账,有两阶段提交(而且我见过的大多数都有一个夜间循环过程,决定你是否透支)。 这个核心系统可以发布信息事务和其他可以转换为NServiceBus的东西。 有了这个,您可以做各种有用的事情,如发送文本提醒,通知其他系统此活动,订阅欺诈预警系统,订阅奖励平台累积奖励积分等。

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

关于透支条件,考虑这一点的最佳方式是将其作为与权威核心分开的事件来源。 这是唯一一个知道并且可以推动“账户透支”的事件的系统,该事件本身可以触发通知,费用,给分公司经理的注释……