Mulesoftの同期処理、非同期処理を解説!

こんにちは。株式会社VALGOエンジニアのヌマです。
地元秋田からリモートで全国各地のお仕事をしています。

今回はMulesoftの同期処理、非同期処理に関して紹介します。

同期処理、非同期処理とは?


Mulesoft以外のシステムでも同様ですが、「同期」は処理が順番に実行され、前のタスクが終わるまで次のタスクに進まない方式、「非同期」はタスクの完了を待たずに次のタスクに進める方式となります。

  • 同期: 確実性・単純さ重視。「待つ」。
  • 非同期: 効率・応答性重視。「待たない」。

Mulesoftの主な同期処理、非同期処理のコンポーネント


MulesoftではVM Connectorが使われます。

  • Consume
  • Listener
  • Publish
  • Publish consume

中でもSalesforce 認定 MuleSoft デベロッパー試験の出題範囲から設定方法を紹介します。

VM Connectorを利用した実装

VM Connector は次の場合に使用します。

  • クラスター全体で作業を分散する場合
  • 同じ Mule ドメインで実行中の異なるアプリケーションと通信する場合
  • 完全な JMS ブローカーの使用が妥当でない単純なキューを実行する場合

クラスターとは

クラスターは、最大 8 台のサーバーから構成され、1 つのデプロイメント対象として、さらには高可用性の処理単位として機能します。サーバーグループとは異なり、クラスター内のアプリケーションインスタンスは相互を認識し、共通の情報を共有して、状況を同期させます。

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

VM Connectorを利用した実装の問題例

上記の処理は下記のようになります。

  1. Publish コンポーネントから “Flow1” フローを呼び出します
  2. Request コンポーネントから “Flow2” フローを呼び出します
  3. Publish consume コンポーネントから “Flow3” フローを呼び出します
  4. 各種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の記事を書いておりますので、よかったら参考にしてください。

「Mulesoft開発」あるある!よくある質問回答集(開発者向け) – 株式会社VALGO