2012-08-07 107 views
1

所以我一直在閱讀關於EventStore和NServiceBus的內容,我喜歡讓我的數據的事務日誌可以幫助我基於這些數據構建視圖。使用高級別的NServiceBus和EventStore

我現在不明白的是如何區分將寫入您的讀取存儲的事件和可能觸發電子郵件發送的相同事件。

ex。創建一個客戶

CreateUserCommand -> CreateUserCommandHandler -> CreatedUserEvent 

我是否應該使用CreatedUserEvent觸發我寫入數據存儲並向用戶發送電子郵件?

+0

這裏的假設是您將發佈事件,而不是將它發送到每個端點。真的嗎? – 2012-08-10 12:42:54

+0

是的,這是正確的,我發佈和執行命令後的事件。 Udi Dahan指出,一個命令/命令處理程序對應該負責發起一個事件,並且只負責該特定事件。沒有其他雙人應該射擊那個事件。 – 2012-08-13 12:52:05

+2

假設事件在成功寫入時發佈,我沒有看到有幾個端點爲了不同的目的而提取和處理事件的問題。 – 2012-08-13 12:58:12

回答

1

在過去的幾年中,Eric Evans已經認識到他的DDD模式的更新:域名事件(又名外部事件概念)。

事件採購模式中的內部事件是我們一直關注的內容,例如您的示例中的UserCreatedEvent。使用IEvent標記界面保持這些顯式。

儘管在事件總線上發佈IEvents,但IDomainEvents對更大的外部到域通知的影響更大,因爲它們不會影響每個說法的聚合狀態。

所以......

CreateUser (ICommand) 
^- CreateUserCommandHandler 

UserCreated (IEvent) 
^- UserCreatedEventHandler 

SendNewUserEmail (ICommand) 
^- SendNewUserEmailCommandHandler 

NewUserEmailSent (IDomainEvent) 
^- UserRegistrationService or some other AC 

我仍然很新的事件採購自己;但是,我猜你可以在總線上登錄UserRegistrationService來偵聽SendNewUserEmail ICommand。

無論你走到哪裏,我都會集中精力爲發送電子郵件創建其他命令/事件併發送電子郵件。然後,稍後您可以查看事務日誌,瞭解它的排隊時間,發送時間,發送時是否有重試,同時發送了多少時間,是否會影響時間延遲(日期時間差異)顯示任何瓶頸?,安裝一個發送電子郵件的隊列,並將其分解爲一個較小的獨立服務等等。