3.4.3 TP1/Message QueueまたはMQSeriesからメッセージを受信する

TP1/Message QueueまたはMQSeriesのメッセージキューからメッセージを受信します。メッセージキューから受信したメッセージは,後続ジョブのアプリケーションプログラムで利用できます。

<この項の構成>
(1) メッセージ受信の定義方法
(2) 受信するメッセージの格納形式
(3) 受信したメッセージの引き継ぎ情報
(4) メッセージ受信時の注意事項

(1) メッセージ受信の定義方法

メッセージ受信を実行するために,次の2種類のうちどちらかの方法で定義します。

メッセージ受信の詳細定義(またはパラメーター)には,次の項目を指定します。なお,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 受信したメッセージの引き継ぎ情報

引き継ぐ項目制限値(単位:バイト)
相関識別子24
メッセージ識別子24
メッセージ入力キュー名48
モデルキュー名48
メッセージ格納ファイル名256
注※
受信したメッセージを,メッセージ構造体として格納したファイル名のことです。このファイルは,環境設定で定義した引き継ぎデータ格納ディレクトリに格納されます。
なお,このファイルは自動的には削除されません。このファイルを後続ジョブに引き継ぐように指定した場合は,後続ジョブでファイルを削除するようにしてください。

(4) メッセージ受信時の注意事項

メッセージ受信時の注意事項を次に示します。

相関識別子・メッセージ識別子で扱える文字コードと形式
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受信元の宛先キュー名受信元キュー名
DestQMgrName受信元の宛先キューマネージャー名初期値
Encoding受信元のマシンコード形式受信したメッセージのマシンコード形式
CodedCharSetId受信元の文字セット識別名受信したメッセージの文字セット識別名
Format受信元のフォーマット名受信したメッセージのフォーマット名
PutApplTypeデッドレターキュー(送達不能キュー)にメッセージを出力するアプリケーションタイプ初期値
PutApplNameデッドレターキュー(送達不能キュー)にメッセージを出力するアプリケーションの名前初期値
PutDateメッセージがデッドレターキュー(送達不能キュー)に出力された日付デッドレターキュー(送達不能キュー)へのメッセージ送信時に求めた日付
PutTimeメッセージがデッドレターキュー(送達不能キュー)に出力された時間デッドレターキュー(送達不能キュー)へのメッセージ送信時に求めた時間
格納される初期値や仮定値については,TP1/Message Queueと連携する場合はマニュアル「OpenTP1 Version 5 分散トランザクション処理機能 OpenTP1 メッセージキューイング機能 TP1/Message Queue MQI 解説・文法編」を,MQSeriesと連携する場合はMQSeriesのドキュメントを参照してください。

トランザクション管理をする場合
MQSeries連携は,トランザクション管理に対応していません。
TP1/Message Queue連携は,トランザクション管理に対応しています。トランザクションは,JP1/AJS2イベントジョブのメッセージの取得が終わったときに完了となります。
ほかのアプリケーションと同じメッセージキューを使用してキューを監視する場合
相手側のアプリケーションがメッセージキューに対して排他制御をしている場合は,排他制御を解除してください。これは,キューの監視中にJP1/AJS2がキューの参照権限の排他制御をしているためです。
メッセージ識別子,および相関識別子
メッセージ識別子,および相関識別子は,メッセージキューシステム連携で受信メッセージを監視する際の監視条件となります。
そのため,メッセージ識別子および相関識別子の値は,メッセージ登録元で設定してください。
受信したメッセージ
受信したメッセージの取得後,そのメッセージは削除されます。