0

タスク エグゼキューターで構成されたパブリッシュ/サブスクライブ チャネルが与えられた場合、例外がスローされた場合に、順序付けられたサブスクライバーの呼び出しが中断される可能性はありますか?

たとえば、この例では、「worked」メッセージは、シーケンス内の 2 番目のサービス アクティベーターによって引き続き送信されます。私はこれが起こらないことを望みます。

    <int:publish-subscribe-channel id="input" task-executor="taskExecutor" />

    <int:service-activator
        input-channel="input"
        order="1" 
        expression="1 / 0" 
        output-channel="nullChannel"
    />
    <int:service-activator
        input-channel="input"
        order="2" 
        expression="'worked'" 
        output-channel="output"
    />

    <int:channel id="output">
        <int:queue />
    </int:channel>

Fileこれの実際の使用例は、aが 2 つのサブスクライバーに発行され、1 つはコンテンツの解析用で、もう 1 つは S3 へのアーカイブ用であるという点で、やや複雑です。シーケンスが適用されるため、両方のタスクが完了したら、後で集約して削除できます。

S3 アップロードは、応答を返さないアウトバウンド チャネル アダプターで実現されます。orderそのため、最初に S3 アダプターを (属性を使用して) 呼び出してからブリッジに送信するパブリッシュ/サブスクライブ チャネルがありFile、ブリッジはそれを、集約されたメッセージを収集するチャネルに配置します。

S3 アップロードが失敗した場合、ファイルを削除したくないので、アップストリーム チャネルの 2 番目のサブスクライバーを呼び出してはなりません。

4

1 に答える 1

1

両方のタスクが非同期で実行されるため、タスク エグゼキューターを追加する場合、"order" 属性はまったく意味がありません。「2番目の」スレッドを中断するのは遅すぎるかもしれません。一般的な質問に答えるには、いいえ、1 つのスレッドで障害が発生しても、他のスレッドが中断されることはありません。

ユースケースを正しく理解していれば、成功または失敗に基づいてさまざまなアクションを実行するために を<request-handler-advice-chain/>追加できる新しい 2.2 機能を使用して、やりたいことを実行できるはずです。ExpressionEvaluatingRequestHandlerAdviceこれについては、このブログで説明しています... http://blog.springsource.org/2012/10/09/spring-integration-2-2-retry-and-more/と、具体的にはそれが参照するサンプル コード ( ftp アダプター)...

<int-ftp:outbound-channel-adapter
    channel="inputChannel"
    session-factory="mockSessionFactory"
    remote-directory="foo">
    <int-ftp:request-handler-advice-chain>
        <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <property name="onSuccessExpression" value="payload.delete()" />
            <property name="successChannel" ref="afterSuccessDeleteChannel" />
            <property name="onFailureExpression" value="payload.renameTo(payload.absolutePath + '.failed.to.send')" />
            <property name="failureChannel" ref="afterFailRenameChannel" />
        </bean>
    </int-ftp:request-handler-advice-chain>
</int-ftp:outbound-channel-adapter>
于 2013-02-07T18:06:13.930 に答える