gpt4 book ai didi

CQRS EventStore Dispatcher 错误处理

转载 作者:行者123 更新时间:2023-12-05 00:04:33 26 4
gpt4 key购买 nike

我在看 2 个场景:A 没问题,B 不确定。

场景A:模拟提交后、分派(dispatch)前的应用程序重启

  • 启动EventStore
  • 提交更改
  • 事件未发送
  • 停止事件商店
  • 启动事件存储

  • 在第 5 步中再次发送提交的事件。这工作正常,我在调度程序代码中也看到了这一点。

    场景B:模拟总线错误
  • 启动EventStore
  • 提交更改 1
  • 调度程序中的异常
  • 提交更改 2
  • 发货好

  • 在这种情况下,我找不到行为,也想知道它是否是有效案例:
    仅当总线代码中存在错误时才会发生这种情况。

    是否存在将重试调度的触发器,或者我是否需要编写代码来处理这个问题,或者我的推理有问题?

    最佳答案

    您对场景 A 的评估是正确的,在应用程序或机器重新启动/进程终止等故障情况下,当进程再次启动时,它将发现未调度的提交并将它们推送到调度程序。

    场景 B 有点棘手。问题在于 EventStore 不是总线,因此如何处理总线中的错误的问题不是 EventStore 本身无法处理的问题。此外,由于有许多总线实现,我不想将 EventStore 耦合到任何特定实现。有些用户甚至可能不使用消息总线;他们可能决定改用 RPC 调用。

    那么你真正遇到的问题是,应该如何处理总线故障——以及扩展的队列故障——应该如何处理? EventStore 有一个接口(interface) IPublishCommits。当一个事件被提交时,它会被推送到一个调度程序。一旦 IPublishCommits 的实现正确且成功地处理了一个事件,调度程序只负责将其标记为已调度。

    处理瞬时总线和队列故障的最佳方法是在您的 IPublishCommits 实现中实现断路器模式,该模式会重试直到事情再次开始工作。对于更大的问题,例如序列化失败,您可能希望记录某种会立即通知管理员的严重故障。同样,所有这一切的棘手问题是 EventStore 无法了解您的情况的所有细节。

    关于CQRS EventStore Dispatcher 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620578/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com