Web Service Aggregation サンプルで使用されるメッセージ・フローおよびメッセージ・セットのキーポイントについて説明します。
集約ファンアウト・メッセージ・フローには、それぞれが AggregateRequest ノードの上流のノードである 1 つ以上の出力ノードが含まれます。 ファンアウトの対象となるすべてのメッセージが出力ノードと AggregateRequest ノードを通過すると、メッセージ・フローは作業単位をコミットします。 出力ノードがトランザクションである場合、出力メッセージはこのコミット点で送信されます。 ノードが非トランザクションである場合 (例えば、HTTP を使用する場合)、メッセージはノードの終了時に送信されます。 この動作は集約に影響する可能性があります。ターゲット Web サービスが即時実行される場合、集約のコミットが完了する前に応答が到着する可能性があるからです。 この場合、応答は集約応答では不明なメッセージと見なされ、指定されたタイムアウトの後に処理されます。 この問題を回避するには、 集約メッセージ・フローのファンアウトにトランザクションの出力ノードを使用します。MQOutput ノードはトランザクション性をサポートします。
Web Service Aggregation サンプルでは、処理の重要な特徴として、SOAP 要求全体の応答 ID を安全に保管することが関係しています。 メッセージ・フローごとに、この振る舞いを達成する方法に関する説明が提供されます。
Web Service Aggregation サンプルには 6 つのメッセージ・フローが含まれています。 5 つのフローは、Web サービスの集約に使用されます。 これらのフローは、以下の表で示されている順序で実行されます (詳しくは、各フローをクリックしてください)。 6 番目のメッセージ・フローはフロー・モニター・データを処理します。
シーケンス | メッセージ・フロー名 | 説明 |
---|---|---|
1 | WSAggregationFanOut.msgflow | WebSphere MQ を介してさまざまな Web サービス SOAP 要求を呼び出します (ファンアウト) |
2 | WSAggregationMQtoSOAP.msgflow | WebSphere MQ SOAP メッセージを HTTP に変換します |
3 | WSAggregationTargetWS.msgflow | Web サービスを実行し、応答を生成します |
4 | WSAggregationSOAPtoMQ.msgflow | HTTP 応答を WebSphere MQ に変換します |
5 | WSAggregationFanIn.msgflow | Web サービスから応答を受け取り (ファンイン)、統合された SOAP 応答を生成します |
WSAggregationReadMonitordata.msgflow | メッセージ・フロー・モニタリングによって生成されたメッセージを処理します |
WSAggregationFanOut.msgflow メッセージ・フローには、AggregateRequest ノードの上流である MQOutput ノードが含まれます。 WebSphere MQ ノードを使用することによって、 ファンアウトはトランザクションになります。MQOutput ノードでトランザクション性を指定するには、「トランザクション・モード」を「はい」に設定します。
フローには、関連した MQOutput ノードを上流に持つ 2 つの AggregateRequest ノードが含まれています。 必要に応じて、ノードのペアをさらに追加することができます。
WSAggregationFanOut.msgflow フローの実行時に、各キューに 1 つ以上のメッセージを書き込むことができます。 1 つのキューに書き込まれるメッセージの数は、入力メッセージ内のフィールドの値によって決まります。
フローは、元の SOAP 応答 ID をそれぞれの出力メッセージの MQMD.CorrelId フィールドに保管します。
各 WebSphere MQ メッセージには、集約の要件になっている固有の MQMD.MsgId フィールドがあります。
WSAggregationMQtoSOAP.msgflow メッセージ・フローには 2 つの類似した部分があります。 2 つの MQInput ノードは、 WSAggregationFanOut.msgflow によって書き込まれる 2 つの WebSphere MQ キューの役割を果たします。
各部分によって呼び出される Web サービスは同じものです。 必要に応じて、個別の Web サービスを呼び出せるように、この振る舞いを変更することができます。 振る舞いの変更方法の説明については、サンプルの拡張を参照してください。
WSAggregationMQtoSOAP.msgflow メッセージ・フローは、元の SOAP 応答 ID を SOAP ローカル環境の UserContext フィールドに保管します。
実行予定の Web サービスのために、フローは MQMD.MsgId から新規の SOAP 応答 ID を作成します。
WSAggregationTargetWS.msgflow メッセージ・フローは、Web サービス応答メッセージを作成します。 例えば、 WSAggregationMQtoSOAP.msgflow の各部分が異なる Web サービスを呼び出す場合、 フローを複製して別々の Web サービスを表すことができます。
Web サービスは、呼び出された回数のカウントをとっています。 この数値は、応答メッセージの <orderAmt> フィールドに戻されます。 <partNo> が ABC1234 である場合、<orderStatus> フィールドは confirmed に設定されます。 それ以外の場合は、rejected に設定されます。
WSAggregationSOAPtoMQ.msgflow メッセージ・フローは、(ローカル環境の SOAP UserContext からの) 元の SOAP 応答 ID を出力メッセージの MQMD.MsgId フィールドに保管します。
フローは、Properties.ReplyIdentifier で以前に呼び出された Web サービスの SOAP 応答 ID を保管します。 WebSphere MQ メッセージが生成されると、MQMD.CorrelId にこの値が入れられます。
フローは、MQMD.MsgType を MQMT_REPLY に設定します。
WSAggregationFanIn.msgflow メッセージ・フローは、集約された応答メッセージから元の SOAP 応答 ID を復元します。
集約された応答メッセージの <AMT> フィールドには、最後に呼び出された Web サービスの <orderAmt> フィールドの値が入ります。
WSAggregationReadMonitordata.msgflow メッセージ・フローは、そのデータに関連したフロー・モニタリングによって発信されたパブリッシュ/サブスクライブ・メッセージを、入力データとして取ります。
WSAggregationReadMonitordata.msgflow メッセージ・フローでは、Collector ノードは、ビジネス・データの各部分ごとに個別のコレクションを作成します。 ビジネス・データの各部分ごとに生成されるイベント・メッセージの数は事前にはわからないため、Collector ノードは、その Input ターミナルで 10 秒後にタイムアウトします。 (名目上) 最大 100 個のイベントが指定されます。 100 より多いイベントが収集される場合、データは複数のコレクションに入れられます。 コレクションが完了するか、あるいは 10 秒のタイムアウトが経過すると、モニター・イベントの要約が Businessdata.xml ファイルに書き込まれます。
FileOutput ノードは、ファイル名が重複した場合に、タイム・スタンプを出力ファイルに追加し、ファイルをアーカイブして既存のファイルと置換することを指定します。 この振る舞いにより、同じビジネス・データを含む複数のコレクションが収集された場合、モニタリング・データが失われることはありません。
WSAggregationMessages メッセージ・セットには、2 つの WSDL 定義のセットから派生した定義が含まれます。
メッセージ・セットには、フロー・モニタリングで使用されるメッセージ定義も含まれます。 これらは、WebSphere Message Broker によって提供される XML スキーマから生成されます。