我有兩種類型的事件:有條件啓動佐賀
- PersonChanged
- PersonAddressChanged。
當創建新人(和新地址)(創建或更新類型)時,他們兩個都正在發佈。
當創建一個新的人兩個事件公佈:PersonChanged和PersonAddressChanged(按順序)。但是,因爲NServiceBus
是異步的,所以它們可以按任意順序處理。並且,當地址更改(對於現有人員)時,不存在PersonChanged事件,只有PersonAddressChanged事件。
我想寫PersonAddressChanged事件的處理程序,這將:
- 檢查,如果該人是在數據庫
- 如果是的話那麼就進行更新
- 如果沒有再啓動的傳奇,等待PersonChanged事件(假設它是一個新的人)
而在PersonChanged事件中,我需要插入的人的數據庫,找到傳奇和運行處理程序PersonAddressChangedØ再次。
我可以用NServiceBus傳奇故事實現這一目標?我不能認爲消息處理的順序應該是PersonChanged → PersonAddressChanged
,因爲有時候不會有任何特定地址更改的PersonChanged事件。
我喜歡這個解決方案,但我得到以下錯誤:'NHibernate.Event.Default.AbstractFlushingEventListener-無法與會話NHibernate.PropertyValueException同步數據庫狀態:爲Namespace.PersonSaga.PendingAddressChanged ---> System.IndexOutOfRangeException脫水屬性值出錯:該計數= 29'的SqlParameterCollection的索引29無效。有任何想法嗎? – bpiec
@bpiec:你的事件是作爲接口還是具體類來實現的? NServiceBus生成圍繞接口的代理類,NHibernate可能不喜歡。嘗試用該類的內容替換PersonAddressChanged屬性(即,如果'Person PersonAddressChanged {public string Address {get; set;} public Guid PersonId {get; set;}}',然後將這兩個參數移入' MySagaDataType'並將它們分開設置) – carlpett
我在Saga類中添加了多個屬性,每個屬性都包含相同名稱的屬性,NSB在SQL Server中生成錯誤的表,然後無法保留傳奇:(無所謂,我會盡力找到解決方法,但答案是我正在尋找! – bpiec