私は、スプリング統合を使用してアノテーション駆動のイベントバス(例:Guava Event Bus)を実装しようとしています。 私はイベントを公開するPublishSubscribeChannelを持っています。考えられるのは、@ServiceActivatorアノテートされたメソッドをイベントハンドラとして使用することです。 各メソッドは、処理する必要のあるイベント(ペイロード)に基づいて異なるシグネチャを持つことができます。私が気づいた何 同じinputChannelと異なる署名を持つ複数の@ServiceActivatorメソッド
は、イベントが公開されたときに、 ServiceActivatorAnnotationPostProcessorによって作成 ServiceActivatingHandlerの 全てのインスタンスが呼び出されると、ペイロードに一致しない署名を持つ各メソッドの例外されていることです。例えば。Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 8): Method call: Method handle(model.api.ServiceAvailableEvent) cannot be found on service.eai.TestServiceActivatorImpl2 type
のみ、特定のペイロードタイプのため@ServiceActivatorメソッドを定義する方法はありますか?
ありがとう、私はパターンを誤解しました。同じ合理性がゲートウェイにも当てはまると思います。つまり、同じrequestChannelにサブスクライブされた "@Gateway"アノテーションで注釈が付けられたすべてのメソッドは、同じペイロードを使用する必要があります。私は正しいですか? –
異なる署名を持つ同じクラスに複数のメソッドがある場合、フレームワークはペイロードに一致するメソッドを呼び出すことに注意してください。それらが一意で曖昧でない限りいいえ。署名が異なる複数のゲートウェイメソッドを同じチャネルに公開することができます。 –
'@ Gateway'は全く別の話です。そして、* subscribe *についてではなく、* publish *についてです。 'requestChannel'は、ゲートウェイのメソッド呼び出しを介してメッセージを送信するためのものです。それは異なる '@ Gateway'のために同じチャンネルにすることができますが、それらの引数がパブリッシュするメッセージのための' payload'として正確に数えるべきです。 –