我有一個用例,我想發佈一個非狀態chaininging事件作爲觸發器。Axon:Eventsourced Aggregate none state change event
在絕大多數情況下,聚合會通過應用它們來發布事件。但是,有時需要將事件(可能來自另一個組件內)直接發佈到事件總線。要發佈事件,只需在EventMessage中包裝描述事件的有效負載即可。 GenericEventMessage.asEventMessage(Object)方法允許您將任何對象封裝到EventMessage中...
事件從佐賀內部發布。
當我使用asEventMessage
,看看事件表我有點困惑。該事件具有在系統其餘部分中不存在的集合標識符,並且類型條目爲null
(閱讀文檔時,聽起來好像asEventMessage
的預期行爲等於從集合中應用事件)。
由於我在考慮事件,我在談論概念上的聚合的一部分,它應該是指它,對吧?
所以我製作一個GenericDomainMessage
自己並設置其集合標識符,序列號和手動鍵入:
@SagaEventHandler
public void on (AnotherEvent event, @SequenceNumber long sequenceNr) {
// ...
GenericDomainEventMessage myEvent = new GenericDomainEventMessage(
MyAggregate.class.getSimpleName(),
identifier.toString(),
sequenceNr + 1,
payload);
eventStore.publish(myEvent);
}
此事件不會引入(數據)的狀態變化到其基礎集合體。我把它當作一個在域中具有強烈含義的標誌/觸發器。
我也可以在命令處理程序中從集合中發佈事件,但是需要執行的某些操作不在集合範圍之內。這就是爲什麼佐賀似乎更適合。
所以我的問題是:
正在出版GenericDomainEventMessage
等於AggrgateLifeCycle#apply
的行爲?
應該在聚合中有一個沒有op的處理程序,或者axon會正確處理這個嗎?