Axon で開発しているプロジェクトがありますが、Saga が適切に実行されません。
My Saga には、次のような行が含まれています。
@StartSaga
@SagaEventHandler(associationProperty = "uuid")
public void handle(FirstEvent event) {
System.out.println("Processing FirstEvent for uuid=" + event.getUuid());
associateWith("uuid", event.getUuid().toString());
initialiseWorkflow(event.getUuid(), Status.CREATED) ;
}
@SagaEventHandler(associationProperty = "uuid")
public void handle(SecondEvent event) {
System.out.println("Processing SecondEvent for uuid=" + event.getUuid());
this.processStep(STEP_2,event.getUuid());
}
First イベントは開始サガをトリガーし、initialiseWorkflow タスクもトリガーします (追加のステップのセットを正しく作成します)。ただし、SecondEvent が到着すると (FirstEvent と同じ UUID associationProperty 値で)、サガはその秒を取得しません。イベント。
関連付けを強化するために次の行を具体的に含めようとしましたが、それも機能しませんでした。
associateWith("uuid", event.getUuid().toString());
皮肉なことに、正しく動作する axon テスト フレームワークを使用したテスト ケースがあります。これは次のようなものです。
@Test
public void testSecondEvent() {
fixture.givenAggregate(uuid).published(new FirstEvent(uuid))
.whenAggregate(uuid).publishes(new SecondEvent(uuid))
.expectDispatchedCommandsMatching(exactSequenceOf(
new CompleteTaskCommandMatcher("SecondEvent")));
}
この問題は、コマンドを CommandGateway に直接配置し、リポジトリで結果を直接確認しているエンド ツー エンド テストで発生します。
AnnotatedSagaManager が使用されていることを再確認しましたが、使用されています。
何が間違っているのか、またはSagasの仕組みを誤解している人はいますか?
編集:さらにいくつかの更新:
1) UUID を直接関連付けるときに toString() を使用する必要があることに気付いたので、値をイベントの文字列にしようとしましたが、進行しませんでした。
2) 関連付けられた値を出力してみましたが、直接の関連付け行が必要ないことがわかりました (uuid は、開始サガ プロセス中に関連付けられます)。
3) @StartSaga を secondEvent に配置しようとしましたが、これは "Processing SecondEvent ..." のコードに到達しましたが、新しいサガでした。
理解は深まりましたが、まだ解決策はありません。