こんにちは。株式会社VALGOエンジニアのヌマです。
地元秋田からリモートで全国各地のお仕事をしています。
今回はMulesoftの同期処理、非同期処理に関して紹介します。
同期処理、非同期処理とは?
Mulesoft以外のシステムでも同様ですが、「同期」は処理が順番に実行され、前のタスクが終わるまで次のタスクに進まない方式、「非同期」はタスクの完了を待たずに次のタスクに進める方式となります。
- 同期: 確実性・単純さ重視。「待つ」。
- 非同期: 効率・応答性重視。「待たない」。
Mulesoftの主な同期処理、非同期処理のコンポーネント
MulesoftではVM Connectorが使われます。
- Consume
- Listener
- Publish
- Publish consume
中でもSalesforce 認定 MuleSoft デベロッパー試験の出題範囲から設定方法を紹介します。
VM Connectorを利用した実装
VM Connector は次の場合に使用します。
- クラスター全体で作業を分散する場合
- 同じ Mule ドメインで実行中の異なるアプリケーションと通信する場合
- 完全な JMS ブローカーの使用が妥当でない単純なキューを実行する場合
クラスターとは
クラスターは、最大 8 台のサーバーから構成され、1 つのデプロイメント対象として、さらには高可用性の処理単位として機能します。サーバーグループとは異なり、クラスター内のアプリケーションインスタンスは相互を認識し、共通の情報を共有して、状況を同期させます。

VM Connector のメッセージのパブリッシュとリスンの実装

上記の処理は下記のようになります。
- Publish コンポーネントから “Flow1” フローを呼び出します
- Request コンポーネントから “Flow2” フローを呼び出します
- Publish consume コンポーネントから “Flow3” フローを呼び出します
- 各種FlowではSet payloadでpayloadに対して文字列を追加しています
このAPIを呼び出したときのレスポンスはどのようになるかですが、
- Publish コンポーネントは非同期処理
- Request コンポーネントは同期処理
- Publish consume コンポーネントは同期処理
となるため、レスポンスボディは非同期処理を除いた”WORLD WIDE WEB!”となります。
おまけ( For Eachと Parallel For Each )
両方とも同期処理になります。
For Each は順次処理で、Parallel For Each は並列処理です。 この違いはエラー処理に影響します。
For Eachの順次処理では各処理の途中でエラーが発生した場合、処理を停止し、エラーハンドラーを呼びますが、
Parallel For Eachの並列処理各処理の途中でエラーが発生した場合でも、エラーハンドラーを呼び出す前にすべてのルートを処理します。
- 順次処理: タスクを1つずつ順番に
- 並列処理: 複数のタスクを同時に
実践動画
VM Connectorのフローを例として実際の動きがどうなるか実際に見てみましょう。
クライアントツールの方でもこのようにレスポンスが返ってきます。

まとめ
Mulesoftの同期処理、非同期処理に関して記載しました。
基本的な内容にはなりますが、Mulesoftの学習のお手伝いになれば幸いです。
このほかにもMuleSoftの記事を書いておりますので、よかったら参考にしてください。
