1

Spring Integrationコンポーネント(サービスアクティベーター)がファイルペイロードを含むメッセージを受け取り、出力を生成するようにしたい場合がいくつかあります。さらに、コンポーネントがこの出力を生成したら、元のファイルメッセージを別のチャネルに渡したいと思います。

ユースケースは、いくつかのファイルが入って来て、2つの並列処理ストリーム(S3へのアーカイブとコンテンツの解析)に送信されることです。Gary Russelのおかげapply-sequence="true"で、元のファイルメッセージでパブリッシュ/サブスクライブチャネルの動作を使用しました。両方のストリームがファイルで終了したら、元の相関ヘッダーを含むファイルメッセージを「処理済み」チャネルに配置し、そこからアグリゲーターがそれらをグループ化し、両方が集約されたら、サービスアクティベーターにフィードするチャネルに配置します。ファイルを削除します。

したがって、要約すると、サービスアクティベータがその出力を1つのチャネルに配置すると同時に、受信した元のメッセージを別のチャネルに配置する必要があります。

アップデート

属性publish-subscribeで指定された順序でシリアルに実行されているサブスクライバーと同期して使用する方がよいでしょうか?order

4

3 に答える 3

2

指定なしpublish-subscribeチャネルを使用し、各サブスクライバーにプロパティを配置しました。task-executororder

最初のサブスクライバーはそのことを行い、独自の異なる出力 (私の場合は解析されたファイルの内容) を発行します。ExecutorChannelダウンストリームを使用して、この後続の部分を非同期にしました。

2 番目のサブスクライバーは、最初のサブスクライバーが終了するまで実行されず、同じ入力メッセージ (この場合はファイル) を取得します。2 番目のサブスクライバーをチャネルBridgeにプッシュFileし、「完了したもの」処理パイプラインを削除する準備ができているようにしました。

于 2013-01-10T12:41:44.010 に答える
1

さらに柔軟性を高めるために、SI 2.2では、アドバイスメカニズムを介してエンドポイントに動作を追加する機能が導入されました。提供される標準的なアドバイスの1つは、ExpressionEvaluatingRequestHandlerAdviceです。これにより、(サービスアクティベーターなどの)呼び出しが成功したか失敗したかに基づいてさまざまなアクションを実行できます...

ブログ投稿

関連するサンプルアプリは、たとえば、FTP経由での送信に失敗した後にファイルの名前を変更する方法、またはFTP操作が成功した場合にファイルを削除する方法を示しています。

サンプルアプリ

于 2013-01-10T13:40:31.343 に答える
0

サービスアクティベータの前に盗聴を使用してメッセージをコピーし、別のチャネルに送信します。

于 2013-01-10T12:02:12.693 に答える