代码之家  ›  专栏  ›  技术社区  ›  w0051977

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

  •  0
  • w0051977  · 技术社区  · 7 年前

    假设我有一个银行应用程序(我没有开发一个银行应用程序,但是我相信它得到了我的理解,因为它在许多事件源示例中被使用),它会生成以下消息:

    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错误队列中。

    据我了解,管理员使用类似服务脉冲的工具来隔离处理错误队列。假设管理员需要两个小时来处理错误,在这段时间内,第四个事务就完成了。这不意味着第四笔交易是在第三笔交易之前处理的,账户可能会透支吗?

    我已经完成了一个网络课程,我仍然不清楚。我也看过类似的问题,例如: In CQRS how to work with NServiceBus to update Command and Query store

    1 回复  |  直到 7 年前
        1
  •  0
  •   Joe    7 年前

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

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

    关于透支条件,考虑这一点的最佳方法是将其作为独立于权威核心的事件来来源。这是唯一一个知道并可以推动“账户透支”事件的系统,它本身可以触发通知、费用、给分行经理的通知……