機能説明
指定した複数のメッセージキューのいずれかのメッセージキューよりメッセージを受信します。
記述形式
CALL "MQDGETMSGEX" USING メッセージキューグループアドレス格納域名, 受信モード格納域名, 受信中止条件格納域名, メッセージキュー番号格納域名, メッセージヘッダ域名, メッセージ本体域名, 領域長格納域名, 復帰情報域名, 復帰値格納域名
パラメタ
MQDCONNECTQEXプログラムから通知されたメッセージキューグループのアドレスをそのまま指定します。
メッセージがない場合の対処を指定します。
メッセージがない場合には、すぐに復帰します。
メッセージが到着するまで待ちます。
メッセージの受信中止条件を指定します。
メッセージキューグループ内のいずれかのメッセージキューが、削除・切断・使用禁止またはアクセス禁止の場合、メッセージの受信を中止して復帰します。
メッセージキューグループ内のすべてのメッセージキューが、削除・切断・使用禁止またはアクセス禁止の場合、メッセージの受信を中止して復帰します。
メッセージキューの番号が通知されます。番号は、MQDCONNECTQEXプログラムで指定したメッセージキュー名一覧の出現番号で、以下のように通知されます。
正数:メッセージキューの出現番号(先頭は1)
-1 :メッセージキューに関係なく異常復帰した場合
メッセージヘッダを入れる領域を指定します。領域は発行元が用意します。メッセージヘッダの詳細については、“8.2.29 パラメタの詳細説明”を参照してください。
メッセージ本体を入れる領域を指定します。領域は発行元が用意します。メッセージ本体の詳細については、“8.2.29 パラメタの詳細説明”を参照してください。
メッセージ本体域の領域の長さを指定します。
例外処理のための復帰情報が通知されます。エラー詳細コードには以下の値(10進数)が返されます。復帰情報の詳細については、“8.4 復帰情報の説明”を参照してください。
16 (SYNTAX)
18 (NOSYSTEM)
19 (NOCONNECT)
21 (INVALIDAPI)
25 (DOWNRCV)
29 (DEADLOCK)
30 (BACKOUT)
32 (IO)
33 (NOMEMORY)
36 (PROCESSOVER)
38 (BUFFERLACK)
39 (TRANFILE)
40 (MSGFILE)
51 (UNITMSGOVER)
52 (UNITSUMOVER)
135 (MSGBODYLENGTH)
145 (GETMODE)
149 (GETCOND)
31 (OTHERTHR)
66 (NOQUE)
68 (NOMSG)
73 (QUERINHIBIT)
74 (PURGEMSG)
76 (UNITNOTCONT)
22 (NOCONNECTQUE)
本プログラムの処理結果が通知されます。詳細は復帰値の説明を参照してください。
復帰値
本プログラムの処理結果が、復帰値格納域と特殊レジスタ“PROGRAM-STATUS”で以下のように通知されます。
正常時:0
異常時: -1
注意事項
本プログラムを使用する場合は、事前にMQDCONNECTQEXプログラムでメッセージキューに接続してください。
同一のメッセージキューグループのアドレスを用いて、本プログラムとMQDPEEKMSGEXプログラムを使用することはできません。
メッセージの受信は、特定のメッセージキューに集中しないようにメッセージが存在するメッセージキューの中から任意に受信します。ただし、受信したメッセージが1ユニット複数メッセージの場合は、1ユニットすべてのメッセージを受信するまで同一のメッセージキューより受信します。
本プログラムでは、カーソルは使用しません。メッセージキューからは、プライオリティの高い先頭のメッセージから受信します。
一つのアプリケーションが、複数のメッセージキューから受信する場合、必ずメッセージキューごとにユニット内の全メッセージを受信するようにしてください。
複数のアプリケーションが、同じメッセージキューから同時に受信することは避けてください。1ユニット複数メッセージの場合は、処理結果が保証されません。単一メッセージの場合は、先に受信要求を行ったアプリケーションにメッセージが渡ります。
エラー詳細コード“29”は、メッセージ格納ファイルとしてデータベースを使用している場合に限り通知されます。
メッセージがない場合の対処として“同期モード”を指定している、かつ、メッセージの受信中止条件として“すべてのメッセーキュー”を指定している場合の、待ち受けを解除して停止する方法を以下に示します。
メッセージキューグループのすべてのメッセージキューをアクセス禁止にする。
メッセージキューグループ内のメッセージキューに“停止”を指示するメッセージを送信する。
エラー詳細コード“31”は、MQDCONNECTRDBプログラムを使用してMQDに接続している場合に限り通知されます。