首页 文章

如何通过事件采购和CQRS处理预测错误?

提问于
浏览
0

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

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

1 回答

  • 3

    在任何一种情况下,您都必须告诉您的消息传递总线处理失败,并且应该稍后重新启动该事件,希望数据库将重新联机 . 这就是为什么我们使用具有“至少一次”交付保证的消息总线系统的原因 .

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

相关问题