我用CQRS編寫一個項目。我想從域事件異步構建我的讀取模型。當我閱讀Greg Young和其他關於CQRS的話題時,我看到的只是使用服務總線。但對我來說,服務總線是消息傳輸的技術層,在這種情況下,處理的順序並不明顯。CQRS的事件總線
域事件是具有特殊性的消息:處理順序是顯性的。因此,我使用服務總線(NServiceBus,Mass transit ...)和額外的(複雜)層來確保事件處理順序嗎?或者具有這種特殊性的特定「事件公共汽車」已經存在?
編輯
我解釋更準確地說我的情況:
我做了CQRS第一應用。在這個應用程序中,我使用關係數據庫作爲持久層而不是事件源。該數據庫用於寫入側和讀取側。這是一個選擇。此應用程序在沒有實現的抽象總線上發佈域事件。
我需要使用第一個應用程序的讀取模型構建第二個應用程序。
在這種情況下,如果我使用事件存儲,我使用和事件存儲爲我的第二個應用程序構建投影是一件壞事。如果持久層發生更改,則其他應用程序(偵聽器)會受到影響。
編輯2:解決方案?
解決方案可能是使用兩個事件存儲/服務總線來構建事件總線。因此,持久性的無知被保留下來並且事件總線成爲建立投影和聽事件的工具。
編輯3:GetEventStore
我看GetEventStore,它提供了一個訂閱新機制。 解決方案可能使用GetEventStore作爲事件總線!
因此,如果我使用GetEventStore作爲事件總線,這意味着我使用事件源?或者事件源只是一個僅用於持久層的概念?或者在我的第一個應用程序中,我使用了事件源,因爲我使用聚合的域事件來構建關係數據庫中的狀態?
所以新的問題是什麼是事件採購?將事件直接存儲在事件存儲中或使用域事件來構建狀態?
感謝您的回覆。是的,我使用「正常」數據庫,我認爲使用事件存儲(在選擇事件源的情況下)使讀取模型的預測意味着與持久層的不良依賴性。 RabbitMQ看起來很不錯,但我無法使用它。對我來說最好的是使用基於SQLServer的傳輸層。如果它更復雜,我想我使用一個簡單的查詢在我的寫入端(但它沒有優化)... – jwoets