【问题标题】:How to handle projection errors by event sourcing and CQRS?如何通过事件溯源和 CQRS 处理投影错误?
【发布时间】:2014-11-19 17:20:27
【问题描述】:

我想使用事件溯源和 CQRS,因此我需要预测(我希望我使用正确的术语)来更新我的查询数据库。如何处理数据库错误?

例如,我的一个查询缓存数据库不可用,但我已经更新了其他数据库。因此,当它恢复业务时,不可用的数据库将不会与其他数据库同步。它如何知道它必须运行例如来自事件存储的最后 10 个域事件?我想我必须存储有关数据库当前状态的信息,但是如果该数据库状态存储失败怎么办?任何想法,最佳实践如何解决此类问题?

【问题讨论】:

    标签: domain-driven-design cqrs event-sourcing


    【解决方案1】:

    在任何一种情况下,您都必须告诉您的消息总线处理失败,它应该稍后重新传递事件,希望数据库届时能够重新联机。这就是我们使用具有“至少一次”交付保证的消息总线系统的本质原因。

    对于事务查询数据库,您当然也应该回滚事务。如果您的查询数据库不支持事务,您必须确保在应用程序端更新是幂等的 - 即,如果您的事件在下一次交付尝试时到达,您的投影代码和/或数据库必须设计为重复处理事件不会损害数据库的状态。这有时是微不足道的(例如,当事件导致投影中更改人名时),但通常不是那么简单(例如,当投影只是增加视图计数时)。但这就是您在使用非事务性数据库时要付出的代价。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2020-06-16
      • 2018-11-15
      • 2019-09-22
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多