ループと複数のHTTPおよび非同期SQSを持つSpringIntegrationブロックフロー

ニキル

私はその流れを持っています

1. Starts with a config map -> MainGateway.start(configMap) -> void
2. Splits map into multiple messages per entry
3. For every config entry do the following using an orchestrator java class:
   BEGIN LOOP (offset and limit)
      Data d = HTTPGateway.getData();
      PublishGateway.sendMessage(d); -> Send to 2 SQS queues    
   END LOOP

要件このフローをcron経由でスケジュールする必要があります。1つのオプションは、フローを開始するHTTPエンドポイントを提供することです。ただし、2番目のHTTP要求は、最初の要求が完了するまで待機/タイムアウト/エラーする必要があります。

質問フロースレッドが完了し、単一スレッドのhttpプロセッサしかないまで、フロースレッドのブロッキングを実装するための障壁を検討していました。そのため、一度に1つのリクエストのみが処理され、フローがいつ完了するかを知ることができます。(LOOPはすべての設定エントリオブジェクトで終了し、SQSへのすべてのメッセージが確認されます)。どうすればこれを達成できますか?ループがあり、並列構成と並列SQSディスパッチ用のエグゼキューターでpub-subチャネルを使用しています。

XML configわかりやすくするために以下を削除しました。

   <!-- Bring in list of Configs to process -->
    <int:gateway service-interface="Gateway"
                 default-request-channel="configListChannel" />

    <int:chain input-channel="configListChannel" output-channel="configChannel">
        <!-- Split the list to one instance of config per message -->
        <int:splitter/>
        <int:filter expression="payload.enablePolling" />
    </int:chain>

    <!-- Manually orchestrate a loop to query a system as per config and publish messages to SQS -->
    <bean class="Orchestrator" id="orchestrator" />
    <int:service-activator ref="orchestrator" method="getData" input-channel="configChannel" />

    <!-- The flow from this point onwards is triggered inside a loop controlled by the Orchestrator
         The following Gateway calls are inside Orchestrators loop -->

    <!-- Create a Http request from the Orchestrator using a Gateway -->
    <int:gateway service-interface="HttpGateway">
        <int:method name="getData"
                    request-channel="requestChannel"
                    payload-expression="#args[0]">
        </int:method>
    </int:gateway>

    <!-- Transform request object to json and invoke Http endpoint -->
    <int:chain input-channel="requestChannel" id="httpRequestChain">
        <int:object-to-json-transformer />
        <int-http:outbound-gateway url-expression="headers['config'].url"
                                   http-method="POST"
                                   expected-response-type="java.lang.String"
        />
    </int:chain>

    <!-- Publish Messages to Outbound Gateway -->
    <task:executor id="executor" pool-size="5" />
    <int:publish-subscribe-channel id="publishChannel" task-executor="executor" />
    <int:gateway service-interface="PublishGateway" >
        <int:method name="publishToOutbound" payload-expression="#args[0]" request-channel="publishChannel" />
    </int:gateway>


    <!-- Route to System A SQS with transformations (omitted here)-->
    <int-aws:sqs-outbound-channel-adapter sqs="amazonSQS" channel="publishChannel" queue="system-a-queue" success-channel="successChannel" failure-channel="errorChannel"/>

    <!-- Route to System B SQS with transformations (omitted here)-->
    <int-aws:sqs-outbound-channel-adapter sqs="amazonSQS" channel="publishChannel" queue="system-b-queue" success-channel="successChannel" failure-channel="errorChannel"/>

    <int:logging-channel-adapter logger-name="sqsCallbackLogger" log-full-message="true" channel="successChannel" />

その間、私はABCバリアの例spring-integration-samplesを私のユースケースに適応させようとしています。

アルテムビラン

コメントで指摘したようaggregatorに、ソリューションではアプローチを使用できます。

このようにして、これらの並列SQSリクエストの結果を集約し、元のリクエスターで集約応答を待ちます。このようにして、フローの内部がまだ並行している場合でも、実際にブロックされます。ゲートウェイを呼び出すと、その応答はアグリゲーターから送信されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

非同期フローおよびタスクエグゼキュータ用のSpringIntegration MDC

分類Dev

1つのプロキシの非同期でのセマフォ/複数のプールロック-aiohttp

分類Dev

scalatestでscalaslickテーブルを作成およびドロップするための前後の非同期

分類Dev

複数のプロセスを持つトルネードの接続の非同期プール

分類Dev

単一および複数のプロパティを持つポリモーフィックPOJOへのJSONのマッピング

分類Dev

同じプレフィックスを持つ複数のテーブルをHiveにドロップする

分類Dev

イネーブルおよび非同期リセットを備えたDフリップフロップを使用した4ビットレジスタ

分類Dev

非同期アプリサーバーと複数のブロックサーバー

分類Dev

複数のDBMSおよび複数のプロファイル用にSpringブートを構成する

分類Dev

複数の列と行を持つブロックのブートストラップグリッドの作成

分類Dev

複数のスタートアッププロジェクトを持つプロファイルの選択

分類Dev

複数のストリームを持つフラッターブロック?

分類Dev

複数のストリームを持つフラッターブロック?

分類Dev

複数のヘッダーを持つpythonmatplotlibプロットテーブル

分類Dev

GIT:2つのデスクトップとラップトップおよび中央リポジトリ(サーバー共有フォルダー)から作業を同期するワークフロー

分類Dev

フラッターとブロックの非同期イールド

分類Dev

フロートおよびブロックレベルの要素

分類Dev

複数の非同期呼び出しのブロック

分類Dev

2つのチェーン非同期関数内および別のループ内で非同期関数をループします

分類Dev

複数の場所からのバックアップ作成を自動化し、日付ごとに構造化し、ローカルおよびクラウドの増分バックアップを維持します

分類Dev

Flutter-プロバイダー、ブロックのライフサイクル、およびストリームをいつ破棄するかを理解する

分類Dev

スレッドプールで非同期ワークフローが開始されるのを待つ

分類Dev

FetchおよびFormDataAPIを使用した複数のファイルのアップロード

分類Dev

Postgres groupbyおよび複数の要素を持つグループの抽出

分類Dev

非同期コードのフラグ、ループ、ロック

分類Dev

複数のフィールドを持つJavaScriptプロンプトボックスを設計する方法

分類Dev

同じ宛先Cidrブロックを持つ複数のAWSルート

分類Dev

複数のフィールドと「表示」プロパティを持つCSSセレクター

分類Dev

同じプレフィックス(および抽出サフィックス)を持つANTプロパティをループします

Related 関連記事

  1. 1

    非同期フローおよびタスクエグゼキュータ用のSpringIntegration MDC

  2. 2

    1つのプロキシの非同期でのセマフォ/複数のプールロック-aiohttp

  3. 3

    scalatestでscalaslickテーブルを作成およびドロップするための前後の非同期

  4. 4

    複数のプロセスを持つトルネードの接続の非同期プール

  5. 5

    単一および複数のプロパティを持つポリモーフィックPOJOへのJSONのマッピング

  6. 6

    同じプレフィックスを持つ複数のテーブルをHiveにドロップする

  7. 7

    イネーブルおよび非同期リセットを備えたDフリップフロップを使用した4ビットレジスタ

  8. 8

    非同期アプリサーバーと複数のブロックサーバー

  9. 9

    複数のDBMSおよび複数のプロファイル用にSpringブートを構成する

  10. 10

    複数の列と行を持つブロックのブートストラップグリッドの作成

  11. 11

    複数のスタートアッププロジェクトを持つプロファイルの選択

  12. 12

    複数のストリームを持つフラッターブロック?

  13. 13

    複数のストリームを持つフラッターブロック?

  14. 14

    複数のヘッダーを持つpythonmatplotlibプロットテーブル

  15. 15

    GIT:2つのデスクトップとラップトップおよび中央リポジトリ(サーバー共有フォルダー)から作業を同期するワークフロー

  16. 16

    フラッターとブロックの非同期イールド

  17. 17

    フロートおよびブロックレベルの要素

  18. 18

    複数の非同期呼び出しのブロック

  19. 19

    2つのチェーン非同期関数内および別のループ内で非同期関数をループします

  20. 20

    複数の場所からのバックアップ作成を自動化し、日付ごとに構造化し、ローカルおよびクラウドの増分バックアップを維持します

  21. 21

    Flutter-プロバイダー、ブロックのライフサイクル、およびストリームをいつ破棄するかを理解する

  22. 22

    スレッドプールで非同期ワークフローが開始されるのを待つ

  23. 23

    FetchおよびFormDataAPIを使用した複数のファイルのアップロード

  24. 24

    Postgres groupbyおよび複数の要素を持つグループの抽出

  25. 25

    非同期コードのフラグ、ループ、ロック

  26. 26

    複数のフィールドを持つJavaScriptプロンプトボックスを設計する方法

  27. 27

    同じ宛先Cidrブロックを持つ複数のAWSルート

  28. 28

    複数のフィールドと「表示」プロパティを持つCSSセレクター

  29. 29

    同じプレフィックス(および抽出サフィックス)を持つANTプロパティをループします

ホットタグ

アーカイブ