如何确保最终一致的系统中客户端读取的一致性?

Mar*_*ius 5 eventual-consistency cqrs

我正在深入研究 CQRS,并且正在寻找有关如何在最终一致的系统中解决客户端读取问题的文章。例如,考虑一个网上商店,用户可以将商品添加到购物车中。如果命令“AddItemToCart”的实际处理是异步完成的,如何确保客户端显示购物车中的商品?我了解异步调度命令和基于域事件异步更新读取模型的原理,但我无法从客户端的角度了解这是如何处理的。

Hen*_*rik 4

有几种不同的方法可以做到这一点;

等待用户直到一致

只需轮询服务器,直到读取模型更新为止。这与 Ben 所展示的类似。

通过 2PC 确保一致性

您有一个支持 DTC 的队列;你的命令首先放在那里。那么他们是;执行、事件发送、读取模型更新;全部都在一次交易中。不过,你实际上并没有通过这种方法获得任何东西,所以不要这样做。

愚弄客户

将读取的模型放置在客户端的本地存储中,并在发送相应事件时更新它们 - 但无论如何您都在期待此事件,因此您已经更新了购物车的 javascript 视图。