最新の安定バージョンについては、Spring Integration 6.4.4 を使用してください!

エンドポイントへの動作の追加

Spring Integration 2.2 以前は、ポーラーの <advice-chain/> 要素に AOP アドバイスを追加することで、統合フロー全体に動作を追加できました。しかし、ダウンストリームエンドポイントではなく、REST Web サービスの呼び出しだけを再試行する場合を考えます。

例: 次のフローを検討します。

inbound-adapter->poller->http-gateway1->http-gateway2->jdbc-outbound-adapter

ポーラーのアドバイスチェーンに一部の再試行ロジックを構成し、ネットワークグリッチのために http-gateway2 への呼び出しが失敗した場合、再試行により http-gateway1 と http-gateway2 の両方が再度呼び出されます。同様に、jdbc-outbound-adapter で一時的な障害が発生すると、両方の HTTP ゲートウェイがもう一度呼び出されてから、再び jdbc-outbound-adapter が呼び出されます。

Spring Integration 2.2 は、個々のエンドポイントに動作を追加する機能を追加します。これは、多くのエンドポイントに <request-handler-advice-chain/> 要素を追加することで実現されます。次の例は、outbound-gateway 内の <request-handler-advice-chain/> 要素の使用方法を示しています。

<int-http:outbound-gateway id="withAdvice"
    url-expression="'http://localhost/test1'"
    request-channel="requests"
    reply-channel="nextChannel">
    <int-http:request-handler-advice-chain>
        <ref bean="myRetryAdvice" />
    </int-http:request-handler-advice-chain>
</int-http:outbound-gateway>

この場合、myRetryAdvice はこのゲートウェイにローカルにのみ適用され、応答が nextChannel に送信された後にダウンストリームで実行されるその他のアクションには適用されません。アドバイスの範囲はエンドポイント自体に限定されます。

現時点では、<chain/> 全体のエンドポイントにアドバイスすることはできません。スキーマでは、チェーン自体の子要素として <request-handler-advice-chain> を許可していません。

ただし、<request-handler-advice-chain> は、<chain> 要素内の個々の応答生成エンドポイントに追加できます。例外は、応答を生成しない チェーンでは、チェーンの最後の要素が outbound-channel-adapter であるため、最後の要素に通知できないことです。そのような要素を通知する必要がある場合は、チェーンの外側に移動する必要があります (チェーンの output-channel はアダプターの input-channel です)。その後、アダプターは通常どおりアドバイスされます。応答を生成する チェーンの場合、すべての子要素にアドバイスできます。