CQRS EventStore Dispatcher错误处理

我正在看两个场景:A没关系,B不确定.

场景A:在分派之前模拟应用程序重新启动

>启动EventStore
>承诺改变
>事件未派遣
>停止活动商店
>启动活动商店

De commited事件在第5步再次发送.这很好,我也在调度程序代码中看到了这一点.

场景B:模拟总线错误

>启动EventStore
>承诺改变1
>调度员的例外情况
>承诺改变2
>派遣好的

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

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

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

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

你真正拥有的问题是,如何处理总线故障 – 以及扩展,队列故障? EventStore有一个接口IPublishCommits.当事件提交时,它会被推送到调度员.调度员只需负责将事件标记为在IPublishCommits的实施正确并成功处理后发送.

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

相关文章
相关标签/搜索