複数のメッセージ・フロー、アプリケーション、またはサービスによって使用される共通の処置シーケンスを用意するためにサブフローを定義できます。
メッセージ・フローには、組み込みノードやユーザー定義ノードを組み込むのと同じ方法で、サブフローを組み込むことができます。 また、同じ仕方でサブフローを他のノードに接続することもできます。
サブフローには、以下の利点があります。
- 再利用可能であり、開発時間を削減できます。
- 一貫性があり、メッセージ・フローの保守容易性を増大させます (サブフローは、プログラミング・マクロ、または一度作成されると多くの箇所で使用されるインライン・コードに類似したものと考えてください)。
- サブフローを特定のコンテキストに合わせる柔軟性があります (例えば、出力キューまたはデータ・ソース情報を更新することによって)。
サブフローの使用については、次の例をご覧ください。
- エラーが発生した場合、いくつかのメッセージ・フローに適用される、共通の処置シーケンスを提供するサブフローを定義することができます。
例えば、Database ノードを介してメッセージをデータベースに書き込み、それをエラー・リカバリー・ルーチンによる処理のためのキューに入れる、という共通のエラー・ルーチンを作成することができます。
複数のメッセージ・フローにおいて、または 1 つのメッセージ・フロー内の数か所で、このルーチンを使用すれば、リソースを効率的かつ整合した仕方で使用でき、エラーが発生するたびにそのようなルーチンを再作成する必要をなくすことができます。
- いくつかの異なるメッセージ・フローを移動するメッセージに対して、共通の計算を実行することができます。例えば、データベースの通貨為替レートにアクセスし、いくつかの異なる通貨価格の計算にそれらを適用することができます。適切なメッセージ・フローのそれぞれに、通貨計算サブフローを組み込むことができます。
サブフローについて詳しくは、../com.ibm.scenarios.doc/UnderstandingSubflows/topics/scnsubflows_01_11_.htmのシナリオを参照してください。
サブフローのタイプ
サブフローを一度定義すると、複数のメッセージ・フロー、アプリケーション、サービス、およびメッセージ・ブローカー・プロジェクトで使用できます。
サブフローの内容は、メッセージ・フローの内容を定義するときと同じ方法で定義します。つまり、メッセージ・フロー・ノードを追加、構成、および接続することによって行います。
注: 実行時に、サブフローの各インスタンスは、そのサブフローを定義するすべてのメッセージ・フロー・ノードのコピーを作成します。
これはリソースの使用量に影響するため、メッセージ・フローのパフォーマンス全体に影響を与える可能性があります。
サブフローは、
.subflow ファイルまたは
.msgflow ファイルとして作成できます。
以下の情報に基づいて、使用するサブフローのタイプを選択してください。
- .subflow ファイルで定義されているサブフローは、以下のいずれかの方法でデプロイできます。
- このサブフローを使用するメッセージ・フローとは別の場所にデプロイする。
サブフローと、このサブフローを組み込んだメッセージ・フローは、ブローカー内の同じ実行グループにデプロイする必要があります。
サブフローは、ブローカー内の実行グループに直接デプロイすることも、ライブラリーの一部としてデプロイすることもできます。
このタイプのサブフローを更新して再デプロイする場合、このサブフローを使用し、かつアプリケーションやサービスの一部ではないすべてのメッセージ・フローは、自動的に更新されます。
これらのメッセージ・フローは再デプロイする必要はありません。
- アプリケーションまたはサービスの一部としてデプロイする。
- このタイプのサブフローで、以下のノードを使用することはできません。
- .msgflow ファイルで定義されたサブフローを表すノード
- .msgflow ファイルで定義されたサブフローから作成されたユーザー定義ノード
- MQOptimizedFlow ノード
- ESQL コードと、.subflow ファイルで定義されたサブフローの両方が含まれる BAR ファイルを作成する場合、コンパイル済みのメッセージ・フロー・ファイルに ESQL コードを直接組み込むことはできません。
- .msgflow ファイルで定義されるサブフローは、このサブフローを使用する親メッセージ・フローが bar ファイルに配置されるときに、そのメッセージ・フローの内部に組み込まれます。
そのため、このタイプのサブフローは、それを使用するメッセージ・フローと一緒にブローカーにデプロイすることしかできません。
- このタイプのサブフローを更新する場合、変更内容を有効にするには、そのサブフローを使用するすべてのメッセージ・フローを再デプロイする必要があります。
- このタイプのサブフローは、ユーザー定義ノードとしてパッケージできます。
サブフローを .msgflow から .subflow に (およびその逆に) 変換するときに適用される条件
.msgflow ファイルとして作成されたサブフローを
.subflow ファイルに変換できます。
- .msgflow ファイルに、.msgflow ファイルとして定義されたサブフローが含まれている場合、これらのサブフローも .subflow ファイルに変換する必要があります。
- この .msgflow ファイルがサブフローとして使用される場合、その親フローを更新して、新しい .subflow ファイルを参照するようにしなければなりません。
.subflow ファイルとして作成されたサブフローを
.msgflow ファイルに変換できます。
- .msgflow ファイルとしてサブフローを作成したアプリケーション、ライブラリー、またはメッセージ・ブローカー・プロジェクトに既に存在するファイルの名前は使用できません。
サブフローのファイル名の末尾に .msgflow を含める必要があります。
サブフローをメッセージ・フローに追加するときに適用される条件
以下のいずれかの記述が当てはまる場合、サブフローをメッセージ・フローに追加できます。
サブフローをサブフローに追加するときに適用される条件
以下のいずれかの場合に、サブフローをサブフローに追加できます。
- .subflow ファイルで定義されたサブフローは、.subflow ファイルおよび .msgflow ファイルで定義されたサブフローに追加することができます。
- .msgflow ファイルで定義されたサブフローは、.msgflow ファイルでのみ定義されたサブフローに追加することができます。
サブフローをデプロイするときに適用される条件
以下のいずれかの方法でサブフローをデプロイできます。
- メッセージ・ブローカー・プロジェクト内で定義される独立リソースとしてサブフローをデプロイする。
- アプリケーション・プロジェクトの一部としてサブフローをデプロイする。
- サービス操作の一部としてサブフローをデプロイする。
- ライブラリーの一部としてサブフローをデプロイする。
ブローカー・アーカイブ (BAR) ファイルをブローカーの実行グループに送信することにより、サブフローを実行グループにデプロイします。これにより、メッセージ・フローの開始時に備えて内容が解凍され、保管されます。
統合ソリューションの一部としてサブフローをデプロイするときに、以下の条件が適用されます。
- .subflow ファイルで定義されているサブフローを組み込んだメッセージ・フローをデプロイする場合、サブフローは BAR ファイルに自動的に組み込まれます。
- アプリケーションに組み込まれたサブフローをデプロイする場合、アプリケーションを実行グループにデプロイする必要があります。これにより、アプリケーションのデプロイメントが完了します。
- サービスに組み込まれたサブフローをデプロイする場合、サービスを実行グループにデプロイする必要があります。これにより、サービスのデプロイメントが完了します。
- ライブラリーに組み込まれたサブフローをデプロイする場合、アプリケーションやサービスの外部にある実行グループにライブラリーを直接デプロイすることができます。
ライブラリーに組み込まれたサブフローは、そのライブラリーと同じ実行グループに直接デプロイされた他のメッセージ・フローやサブフローが参照できます。
- メッセージ・ブローカー・プロジェクトに .msgflow ファイルとして作成されたサブフローは、そこに 1 つ以上の Input ノードが含まれる場合、別個のリソースとしてしかデプロイできません。
バージョン管理
Passthrough ノードは、実行時にサブフローをバージョン管理できるようにするために使用します。
Passthrough ノードを組み込むことにより、メッセージ・フローまたはサブフローにラベルを追加できます。 このラベルと、バージョン管理システムからのキーワード置換とを併用すると、デプロイ済みのメッセージ・フローに組み込まれているサブフローのバージョンを識別できます。
このラベルは自分独自の目的のために使用できます。ラベルに正しいバージョン・キーワードを組み込んでいる場合は、以下のいずれかの方法でラベルの値を参照できます。
- mqsireadbar コマンドを使用してブローカー・アーカイブ (BAR) ファイルに保管されるプロパティーを読み取る。
- WebSphere® Message
Broker Toolkit で、特定のブローカーに最後にデプロイされたデプロイ済みメッセージ・フローのプロパティーにより。
- 実行環境で、メッセージ・フローのユーザー・トレースを使用可能にしている場合。
.subflow ファイルとして作成されたサブフローの場合、サブフローの新しいバージョンをデプロイするときには、以下の動作を考慮する必要があります。
- サブフローが、このサブフローを使用するメッセージ・フローとは別個にデプロイされている場合、そのサブフローの新しいバージョンをデプロイすると、すべてのメッセージ・フローは自動的に更新されます。
- サブフローがアプリケーションまたはサービスの一部としてデプロイされている場合、アプリケーションとサービスに新しいサブフロー・バージョンを組み込んで更新し、そのアプリケーションとサービスを再デプロイする必要があります。
.msgflow ファイルとして作成されたサブフローの場合、サブフローの新しいバージョンをデプロイするときには、以下の動作を考慮する必要があります。
- サブフローを使用するアプリケーション、サービス、および独立リソースに新しいサブフロー・バージョンを組み込んで更新し、それらを再デプロイする必要があります。
サンプル
サブフローの使用例が、以下の例に示されています。
Error Handler では、サブフローを使用してエラーについての情報をトラップし、情報をデータベースに保管します。 Coordinated Request Reply では、処理ロジックを他のメッセージ・フローで再利用できるようにし、代替インプリメンテーションを置換できるようにするために、サブフローを使用して
ReplyToQ および
ReplyToQMgr 値の保管を
WebSphere MQ メッセージ内でカプセル化します。
サンプルに関する情報は、WebSphere Message
Broker Toolkit に統合されているインフォメーション・センター、またはオンライン・インフォメーション・センターを使用する場合にのみ表示できます。 サンプルは、WebSphere Message
Broker Toolkit に統合されているインフォメーション・センターを使用する場合にのみ実行できます。