これまでMuleでのフローの機能について、いくつか使い方を紹介していきました。コンポーネントの組み合わせによってフローが成り立っていきますが、実装によってはフローが長くなり、フローを分割する機会が増えるかと思います。今回はフロー分割する際に知っておきたい、メインフローとサブフローの違い、およびその呼び出し方法についてまとめました。
今回使うコンポーネント
コンポーネント | アイコン | 用途 |
---|---|---|
Flow | メインフローを作成する | |
Sub Flow | サブフローを作成する | |
Flow Reference | メインフロー、サブフローを呼び出す |
メインフローとサブフローの違い
メインフローの特徴
- フローの起点となるSourceを持つ
- フローの停止などフロー内の設定ができる
- エラーハンドリングができる
メインフローのデフォルトテンプレートは以下のような形になっています。処理を行うProcess部分以外に、フローの起点であるSourceやエラー処理を行うError handlingの領域が設けられていることがわかります。
メインフローはinterface内で実装されることが一般的で、メインフローを起点として、実処理部分をサブフロー内で実装するのが主な使い方になります。
メインフローはフローの起点となるため、フロー内で設定を持たせることができます。同時接続数を指定することができるMax Concurrencyやフローの開始/停止を指定することができるInitial Stateなどが設定でき、状況に応じてフローを止めたり接続数を制限することができます。
サブフローの特徴
- フローの起点となるSourceを持たず、Process部分だけで構成される
- フローの停止ができない
- エラーハンドリングができない
- メインフローよりもパフォーマンスが高い
メインフローの特徴を持たないのがサブフローになります。HTTP ListenerなどのSourceを持たないため、サブフロー単独で起動することはできません。必ずメインフローを経由して、Flow Referenceから呼ばれて動作するのがサブフローとなります。
サブフローのデフォルトテンプレートは以下のような形になっており、メインフローと比べてだいぶライトな形になっていることが分かります。体感ではやや分かりずらいものの、余分な機能を持たない分、処理速度などのパフォーマンスは高めとのことです。
起点を持たないのとともに、直接的または間接的にメインフローから呼ばれることになるため、メインフローでは持っているエラーハンドリング処理などはサブフロー内では持つことはなく、呼び出されたメインフローの中でエラーハンドリングが実施されるようになります。
前述した通り、メインフローがほぼほぼinterfaceに集約されることになるため、それ以外のロジック部分についてはinterface以外のフローでサブフローとして作成するのが一般的な作りとなっています。
Flow Referenceを使った呼び出し
Flow Referenceはメインフローまたはサブフローを呼び出すコンポーネントです。設定の仕方としてはシンプルでフローに配置して、Flow nameに呼び出したいフローを指定します。フローの指定は2通りのやり方があります。
選択リストからフローを選択
こちらが一般的な使い方。静的な呼び出し方法になります。Flow ReferenceのFlow nameから選択します。メインフロー、サブフローともに指定可能です。
フロー名を指定して動的に呼び出し
Flow ReferenceのFlow nameには、文字列情報としてフロー名が一致していれば呼び出すことができます。選択リストから選択する以外に、変数などを使用して文字列情報を渡すこでもフローを呼び出すことが可能です。
やや上級者よりのやり方ですが、上記のように指定することで動的にフローを呼び出すことができます。Flow Referenceにはエラーのアイコンが出ていますが、問題なく実行することができます。変数に指定されたフローが呼び出される形になるため、Payloadなどの値は呼び出し元でバラけないように調整する必要があります。
最後に
ざっとメインフローとサブフローの違いについて説明しました。フロー分割を検討されている方は、上記の違いを参考に使い分けしておくといいでしょう。次回は処理の基本となる分岐処理について扱いたいと思います。
コメント