3 メッセージキューシステム との連携(バージョン 7 互
3.4 TP1/Message Queue または MQSeries を 使ったメッセージの送受信
3.4.3 TP1/Message Queue または MQSeries からメッセー ジを受信する
TP1/Message QueueまたはMQSeriesのメッセージキューからメッセージを受信しま す。メッセージキューから受信したメッセージは,後続ジョブのアプリケーションプロ
種別 受信 送信
データグラム ○ ○
問い合わせ △ ×
応答メッセージ △ ×
報告メッセージ ○ ×
グラムで利用できます。
(1) メッセージ受信の定義方法
メッセージ受信を実行するために,次の2種類のうちどちらかの方法で定義します。
• JP1/AJS2 - Viewの[ジョブネットエディタ]ウィンドウでメッセージキュー受信監 視イベントジョブを定義する。
• ユニット定義ファイルに必要な情報を定義し,ajsdefineコマンドで定義する。
メッセージ受信の詳細定義(またはパラメーター)には,次の項目を指定します。なお,
MQSeriesの場合は,デフォルトのキューマネージャーのキューを指定してください。デ
フォルトのキューマネージャー以外のキューは監視しません。
• 相関識別子
• メッセージ識別子
• メッセージ入力キュー名
• モデルキュー名
• メッセージ格納ファイル名
(2) 受信するメッセージの格納形式
メッセージの格納形式を次の図に示します。
図3-6 メッセージの格納形式
注
メッセージは,ファイルに追加されて格納されます。そのため,メッセージを検索 するときは,ファイル内に複数のメッセージがあることに注意してください。
注※1
MQMDは,MQMD長とMQMD構造体の二つの項目から構成されています。
MQMD構造体には,メッセージデータの属性情報が格納されています。
Windowsの場合,MQMD長には,MQMD構造体のデータ長のバイト数に4バイ トを加えた値が格納されています。MQMD構造体はASCII文字で格納されていま す。
UNIXの場合,MQMD長には,MQMD構造体のデータ長にintを加えた値が格納
されています。MQMD構造体は使用するホストの文字コード体系で格納されていま す。
注※2
MQODは,MQOD長とMQOD構造体の二つの項目から構成されています。
MQOD構造体には,メッセージが格納されているキューの情報が格納されていま す。
Windowsの場合,MQOD長には,MQOD構造体のデータ長のバイト数に4バイト を加えた値が格納されています。MQMD構造体はASCII文字で格納されています。
UNIXの場合,MQOD長には,MQOD構造体のデータ長にintを加えた値が格納 されています。MQOD構造体は使用するホストの文字コード体系で格納されていま す。
注※3
メッセージデータは,メッセージデータ長とメッセージデータの二つの項目から構 成されています。
メッセージデータ長には,メッセージデータのデータ長のバイト数に4バイト
(Windowsの場合)またはint(UNIXの場合)を加えた値が格納されています。
メッセージデータには,ユーザーのメッセージデータが格納されています。
メッセージデータは,ユーザーがほかのシステム,または自システムで作成した文 字コードで格納されています。
(3) 受信したメッセージの引き継ぎ情報
受信したメッセージの情報を,後続ジョブに引き継げます。引き継げる情報を次の表に 示します。
表3-5 受信したメッセージの引き継ぎ情報
注※
受信したメッセージを,メッセージ構造体として格納したファイル名のことです。このファイ ルは,環境設定で定義した引き継ぎデータ格納ディレクトリに格納されます。
なお,このファイルは自動的には削除されません。このファイルを後続ジョブに引き継ぐよう に指定した場合は,後続ジョブでファイルを削除するようにしてください。
(4) メッセージ受信時の注意事項
メッセージ受信時の注意事項を次に示します。
引き継ぐ項目 制限値(単位:バイト)
相関識別子 24
メッセージ識別子 24
メッセージ入力キュー名 48
モデルキュー名 48
メッセージ格納ファイル名※ 256
相関識別子・メッセージ識別子で扱える文字コードと形式
TP1/Message QueueおよびMQSeriesのメッセージの受信では,次の文字コードを 使用できます。
• ASCII (USA, International, Japanese, Japanese Extended)
• EBCDIC (USA, International, Japanese, Japanese Extended)
相関識別子またはメッセージ識別子が24バイト未満の場合は,ASCIIではNULL
(「00」)で,EBCDICでは半角スペース(「40」)で不足分を埋めて送信するように,
送信するアプリケーションで設定しておいてください。
受信したメッセージを後続ジョブで使う場合
メッセージ格納ファイルは各JP1/AJS2 - Agentホストに作成されます。ただし,
ファイルをほかのホストへ転送できません。そのため,受信したメッセージを後続 ジョブで使用する場合は,メッセージを受信したホストと同じホストで後続ジョブ を実行するようにしてください。
複数のメッセージキューを監視している場合
複数のメッセージキューを監視している場合,メッセージが到着した順序に関係な くジョブが実行されます。
メッセージ受信失敗時のデッドレターキュー(送達不能キュー)へのメッセージ送信 環境設定でデッドレターキュー(送達不能キュー)が定義されている場合,次のよ うな事象が発生すると,デッドレターキュー(送達不能キュー)にメッセージが送 信されます。
• 情報の引き継ぎを指定していたが,情報引き継ぎファイルへの格納に失敗した。
• メッセージ格納ファイル名が指定されていたが,ファイルへの格納に失敗した。
なお,1回目の処理で,デッドレターキュー(送達不能キュー)への送信が失敗し た場合,送信処理が再実行されます。ただし,TP1/Message Queueまたは
MQSeriesで「キュー管理プログラムと接続不能」または「使用可能なハンドルが
なくなった」のエラーが発生した場合を除きます。
また,デッドレターキュー(送達不能キュー)に最大値以上のメッセージが格納さ れている場合,デッドレターキュー(送達不能キュー)へ送信できません。定期的 にデッドレターキュー(送達不能キュー)を管理してください。
デッドレターキュー(送達不能キュー)に送信されるメッセージに設定される値を 次の表に示します。
表3-6 デッドレターキュー(送達不能キュー)に送信されるメッセージの値
フィールド 内容 設定される値
StrucId 構造体識別子 システムの仮定値
Version 構造体バージョン情報 システムの仮定値
Reason デッドレターキュー(送達不能
キュー)になった理由
初期値
DestQName 受信元の宛先キュー名 受信元キュー名
注
格納される初期値や仮定値については,TP1/Message Queueと連携する場合はマニュアル
「OpenTP1 Version 5 分散トランザクション処理機能 OpenTP1 メッセージキューイング機能 TP1/Message Queue MQI 解説・文法編」を,MQSeriesと連携する場合はMQSeriesのドキュ メントを参照してください。
トランザクション管理をする場合
MQSeries連携は,トランザクション管理に対応していません。
TP1/Message Queue連携は,トランザクション管理に対応しています。トランザク ションは,JP1/AJS2イベントジョブのメッセージの取得が終わったときに完了とな ります。
ほかのアプリケーションと同じメッセージキューを使用してキューを監視する場合 相手側のアプリケーションがメッセージキューに対して排他制御をしている場合は,
排他制御を解除してください。これは,キューの監視中にJP1/AJS2がキューの参 照権限の排他制御をしているためです。
メッセージ識別子,および相関識別子
メッセージ識別子,および相関識別子は,メッセージキューシステム連携で受信 メッセージを監視する際の監視条件となります。
そのため,メッセージ識別子および相関識別子の値は,メッセージ登録元で設定し てください。
受信したメッセージ
受信したメッセージの取得後,そのメッセージは削除されます。
DestQMgrName 受信元の宛先キューマネージャー名 初期値
Encoding 受信元のマシンコード形式 受信したメッセージのマシンコード形式
CodedCharSetId 受信元の文字セット識別名 受信したメッセージの文字セット識別名
Format 受信元のフォーマット名 受信したメッセージのフォーマット名
PutApplType デッドレターキュー(送達不能
キュー)にメッセージを出力するア プリケーションタイプ
初期値
PutApplName デッドレターキュー(送達不能
キュー)にメッセージを出力するア プリケーションの名前
初期値
PutDate メッセージがデッドレターキュー
(送達不能キュー)に出力された日 付
デッドレターキュー(送達不能キュー)
へのメッセージ送信時に求めた日付
PutTime メッセージがデッドレターキュー
(送達不能キュー)に出力された時 間
デッドレターキュー(送達不能キュー)
へのメッセージ送信時に求めた時間
フィールド 内容 設定される値