Async スコープ

Async スコープは、メインフローと同時に実行される分岐処理ブロックです。メインフローは、Async スコープの開始中や処理中に実行され続けます。非同期フローに埋め込まれた最後のメッセージプロセッサがタスクを完了するまで、フローは一時停止する必要はありません。

Async は、応答を開始フローに返信する必要がない、時間のかかる操作 (ファイルの印刷やメールサーバへの接続など) を実行する場合に役立ちます。

同時分岐処理を容易にするため、Async スコープは受信したメッセージの 1 つのコピーを独自の処理ブロック内にある最初の埋め込みメッセージプロセッサに送信します。同時に、メインフロー内の次のメッセージプロセッサにメッセージの別のコピーを送信します。

Async + スコープ + 概略図

Async スコープは「ファイアアンドフォーゲット」方式で実行されるため、スコープ内の処理の結果はメインフローでは使用できません。

Async スコープとサブフローの比較

Async スコープは、次の点でサブフローと異なります。

  • メインフローの例外戦略を継承しない。

    Async スコープでエラーを処理するには、Try スコープの使用が必要。

  • メッセージを非同期的に処理する。

  • データをメインフローに渡さない。

  • メインフロースレッドの範囲内に存在する。

  • Flow Reference コンポーネントからはコールされない。

  • 再利用できない。

Async スコープが Mule メッセージのコピーを受信しても、ペイロードはコピーされません。同じペイロードオブジェクトが 2 つの Mule メッセージによって参照されます。そのメッセージの 1 つは元のフローに沿って進み続け、もう 1 つは Async スコープによって処理されます。

つまり、メッセージのペイロードが可変オブジェクト (異なる項目が含まれる Bean など) であり、Async スコープ内のメッセージプロセッサがいずれかの項目の値を変更した場合、Async スコープ外部のメッセージプロセッサが変更された値を参照できます。

次の例は、Async スコープの XML を示しています。

<async doc:name="Async">
  <!-- One or more processors here -->
</async>

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub