ページの先頭行へ戻る
Interstage Service Integrator V9.5.0 アプリケーション開発ガイド
FUJITSU Software

6.4.3 WebSphere MQのキューとRequestResponse方式で通信する

ここでは、MQアダプタにおけるRequestResponse方式の通信の実現方法および定義について説明します。

RequestResponse方式通信の実現方法

ISIのMQアダプタにおけるRequestResponse方式の通信は、MQMDのメッセージID(MsgId)および相関ID(CorrelId)を利用して実現されます。

RequestResponse方式では、ISIからMQキューへ要求メッセージを送信する場合、メッセージID(MsgId)を自動的に採番します。MQキューからの応答メッセージ受信時は、採番したメッセージID(MsgId)を利用し、応答メッセージの相関ID(CorrelId)に採番したメッセージID(MsgId)と同じものがあれば、MQキューからの応答メッセージを受信します。

ポイント

  • サービス提供側のMQアプリケーションでは、受信したメッセージID(MsgId)を相関ID(CorrelId)にコピーするようにしてください。

  • ユーザが採番したメッセージID(MsgId)をMQMDマッピング機能で連携させる場合、nullまたは空文字を指定しないでください。nullまたは空文字が指定された場合、ISIがMsgIdを新規に採番します。

  • ISIの共通メッセージのヘッダにすでにMQMDのメッセージID(MsgId)が設定されている場合は、設定されているメッセージID(MsgId)が通信に利用されます。

応答メッセージの待ち時間

ISIのMQアダプタにおけるRequestResponse方式の通信では、要求メッセージの送信(Request)後即座に応答メッセージの受信(Response)を開始します。ただし、キューを用いた双方向の通信となるため、一定時間応答メッセージの到着を待ち合わせます。待ち時間は、サービスエンドポイント定義またはMQアダプタ設定ファイルで指定可能です。両方に定義された場合、サービスエンドポイント定義で指定した値が有効となります。

待ち時間以内に応答メッセージが返ってこなかった場合、通信が失敗したとみなされシーケンスがエラーとなります。エラー情報はOSのシステムログ、ISIのトレースログに出力されます。

ポイント

サービス提供側のMQアプリケーションの処理遅延のためにタイムアウトが発生した場合、応答メッセージが遅れてMQキューに到着する場合があります。この場合、遅れて到着した応答メッセージは受信されずにMQキューに残り続けます。

エラー情報に出力された情報を元に、送れて到着した応答メッセージをMQキューから削除してください。MQキューからメッセージを削除する方法は、WebSphere MQの関連マニュアルを参照してください。

プロセスダウン・サーバダウンが発生した場合

MQのRequestResponse方式通信では、REQUESTキューとRESPONSEキューの2つのキューを利用します。

REQUESTキューへのメッセージ送信が完了しなければ、サービス提供側アプリケーションはキューからメッセージを受信することが出来ません。そのため、MQアダプタはMQキューとの接続ごとに通信を完結させる必要があり、結果として、要求メッセージの送信(Request)と応答メッセージの受信(Response)のそれぞれでトランザクションが分かれます。

REQUESTキューへの要求メッセージ送信が完了すると、MQアダプタはREQUESTキューへの送信処理をコミットします。コミットが完了すると、MQアダプタはRESPONSEキューに接続し、応答メッセージの到着を待ち合わせますが、応答メッセージの受信が完了する前にMQアダプタに何か異常が発生した場合には、RESPONSEキュー内にメッセージが残り続けることがあります。

そのため運用時に異常が発生した場合には、連携しているMQキューに滞留している電文がないか調査を実施してください。調査方法は、WebSphere MQの関連マニュアルを参照してください。

ポイント

  • 応答メッセージの受信トランザクションの処理中にプロセスダウンまたはサーバダウンが発生した場合、ISIのシーケンスではタイムアウトが発生し、シーケンスの実行に失敗します。

  • サービス提供側のMQアプリケーションは2重送信を考慮して設計してください。

RequestResponse方式の定義

MQアダプタを使用してWebSphere MQのキューとRequestResponse方式で通信するための定義は以下のとおりです。

  1. アウトバウンドサービスエンドポイントの作成

    WebSphere MQのキューへメッセージを送受信するため、アウトバウンドサービスエンドポイントを作成します。アウトバウンドサービスエンドポイントの接続方式は“MQ”を選択します。

    詳細は“ISI Studio ヘルプ”の“サービスエンドポイントを操作する”を参照してください。

  2. シーケンスの作成

    1で作成したサービスエンドポイントを呼び出すシーケンスを作成します。

    サービスエンドポイントを呼び出すメディエータファンクションには、“同期サービス呼び出し”または、“ルーティングして同期サービス呼び出し”のメディエータファンクションを利用します。

    詳細は“ISI Studio ヘルプ”の“シーケンスを操作する”を参照してください。

作成した定義はサーバへ登録・配置してください。登録・配置の詳細は“ISI Studio ヘルプ”の“ISIサーバに定義を登録・配置する”を参照してください。

WebSphere MQのキューとのRequestResponse方式通信を確認するには、ISIのシーケンスを動作させ、シーケンスが正しく実行されることを確認してください。

ISIのシーケンスを動作させるには、ISI Studioのシミュレーション機能を利用できます。詳細は“ISI Studio ヘルプ”の“シーケンスの動作を確認する”を参照してください。