我是CQRS和最终一致性模型的新手,所以如果这是一个愚蠢的问题,请原谅我。CQRS最终一致性事件依赖关系
鉴于我刚刚开始,我有一个在内存中的本地CommandBus和EventPublisher。我的事件被保存到RavenDB数据库以用于重放目的,但是事件被发布并且处理程序在本地被调用(不通过NServiceBus等进行外部排队)。 EventPublisher确实异步发布事件(a Task.Factory.StartNew)。
有时我的事件有依赖关系(例如,OrderShipmentStatusUpdated事件可以正确处理到ReadModel之前,必须将OrderReceived事件处理到ReadModel中)。
我该如何处理这种情况?使用Sagas?在如上所述的简单内存模型中,如何使用Sagas? “推迟”一个事件是否被认为是可以接受的(也许将其标记为延期,并简单地尝试重新处理所有延期事件“偶尔”)?
有什么策略可以解决这个问题?
谢谢。
您以异步方式发布事件的原因?如果这些事件是同步发布的,那么您将不会遇到事件的顺序问题,并且您不应该遇到最终一致性问题,因为它们将与命令在同一个线程中运行。 – Sarmaad 2013-04-27 14:42:06
表现。除非我在所有的Web请求中同步并且只有1个服务器,否则我仍然会遇到问题,不是吗? – Jeff 2013-04-27 17:16:32
@Jeff:我认为Sarmaad意味着OrderReceived和OrderShipmentStatusUpdated应该被同步处理。 – IlliakaillI 2013-04-28 04:16:41