我是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