2017-03-09 9 views
0

私は、非ステートチェンジイベントをトリガとして公開したいユースケースを持っています。Axon:Eventsourced集計なし状態変更イベント

大部分の場合、集約者はイベントを適用してイベントを公開します。ただし、場合によってはイベントを(おそらく別のコンポーネント内から)イベントバスに直接パブリッシュする必要があります。イベントをパブリッシュするには、イベントを記述するペイロードを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); 

} 

をその基礎となる骨材(データ)の状態変化を導入しません。私はそれをドメイン内で強い意味を持つフラグ/トリガーとして扱います。

また、コマンドハンドラで集約内からイベントを公開することもできますが、実行する必要のある操作の一部は集約の有効範囲外です。だから、佐賀がもっと適しているようだ。

は、だから私の質問は以下のとおりです。

AggrgateLifeCycle#applyの行動に等しいGenericDomainEventMessageを公開されていますか?

集合体にノーオペレーションハンドラがあるか、またはこれを正しく処理するのはaxonですか?軸索3において

答えて

1

は、EventBusにイベントを発行することは、1つの差と、集計中からそれらをINGのapply()と同じである:apply()は同様に、任意の利用可能なハンドラを呼び出します。ハンドラが利用できない場合、違いはありません。

EventBus.publishは、集計に直接関連付けるべきではないイベントを公開することを意図しています。イベントストアテーブルでは、(メッセージ識別子に等しい)集約識別子を取得しますが、それは技術的な詳細です。

あなたの場合、推奨される解決策はapply()イベントです。イベントが状態変化を引き起こさないという事実は、その時点では問題ではない。あなたはそれのために@EventSourcingHandlerを定義する義務はありません。

関連する問題