鑑於您有多個系統,它們通過事件進行集成,並且所有這些系統都使用事件源。你在哪裏存儲事件?將事件存儲在使用事件採購的分佈式系統中的位置?
在我來說,我有三個系統:
- 一個網站,這是一個商店
- 用於網站管理後臺的客戶,產品等
- 會計制度
每當在其中一個系統中發生域事件時,該事件就會發布,並且可以由其他系統處理。所有系統都使用事件採購。
我在想你會在哪裏保存這些事件。當然,每個系統都必須存儲所處理的所有事件,因爲它使用的是事件源,因此取決於它曾經處理過的事件。
但是如果其他事件不需要,系統也不訂閱呢?我正在努力處理需求可能發生變化的事實,這樣一個系統就必須處理來自過去並不存在的事件。如果系統需要處理它在發生時沒有訂閱的事件,你會從哪裏得到這些事件?
我認爲對於目前不使用事件採購的系統有很大的區別。如果必須在依賴於數據的系統A中實現一個功能,這在A中不可用,但在另一個系統B中可用,並且您通過像NHibernate這樣的ORM工具持續保持當前狀態,則只需將該數據從A導入到B 。由於使用事件採購的系統依賴於事件以達到其當前狀態,因此您必須導入過去錯過但現在需要的所有事件。
對於我來說,這個問題有幾種不同的方法。
- 每個系統保存所有發佈的事件。這使您可以根據需要重新發布事件或將它們導入到另一個系統中。
- 每個系統保存所有發生的事件,即使那些不需要處理的事件(還)。
- 所有系統的所有事件都存儲在中央事件日誌中。如果您需要處理過去發生的事件,但您沒有訂閱,則可以從此處導入。
你是如何處理這種情況的?你在哪裏保存你的事件?
編輯
感謝羅伊Dictus你的答案。我仍然不知道如何處理以下情況:
該網站發佈事件CustomerRegistered,CustomerPurchasedProduct和CustomerMarkedProductAsFavorite。 在當前版本的後端客戶需要顯示並且他們的購買必須被顯示。在該版本的系統中,什麼是客戶標記爲最愛的東西並不重要。因此後端僅訂閱CustomerRegistered和CustomerPurchasedProduct。
現在營銷部門還希望在客戶詳細信息頁面上顯示有關最喜愛產品的信息。由於後端未訂閱CustomerMarkedProductAsFavorite,因此此信息在後端不可用。我從哪裏得到這些信息?
謝謝。請參閱下面的我的編輯。我添加了一個我不知道如何處理的場景。 – Alebo 2011-06-05 08:57:35