27.2.6 メッセージを受信する(CBLMQRECEIVEMSG)
キューからメッセージを受信するには,CBLMQRECEIVEMSGサービスルーチンを呼び出します。
- 形式
-
CALL 'CBLMQRECEIVEMSG' USING 引数1 引数2
- 引数
-
引数1には,キューをオープンしたときにCBLMQOPENサービスルーチンに指定した「表27‒2 MSMQアクセスサービスルーチンで使用するインタフェース領域」の名前を指定します。
引数2には,データパラメタ領域の名前を指定します。
- インタフェース領域に設定する項目
-
-
受信待ち時間
キューにメッセージが配信されるのを待つ時間をmsec単位で指定します。
-1を指定した場合,キューにメッセージが配信されるまで待ち続けます。
-
データ変換フラグ
キューから受信したメッセージ本文のデータをデータ変換して,テキストデータとして格納するかどうかを指定します。
テキストデータに変換して格納する場合は1を,そのまま格納する場合は0を指定します。
インタフェース領域の形式については,「表27‒2 MSMQアクセスサービスルーチンで使用するインタフェース領域」を参照してください。
-
- データパラメタ領域に設定する項目
-
受信したメッセージデータ,およびメッセージのラベルが,次の形式で格納されます。
記述形式
内容
01 データ名1.
CALL文のUSINGで指定するデータパラメタ領域の名前
02 データ名2 PIC S9(9) USAGE COMP.
メッセージのラベルのデータ長
02 データ名3 PIC X(512).
メッセージのラベルのパス名
02 データ名4 PIC S9(9) USAGE COMP.
メッセージデータのデータ長
02 データ名5 PIC X(n).
メッセージデータ
- (凡例)
-
n:メッセージデータのデータ長
- 戻り値
-
100:受信待ち時間の間にメッセージが配信されなかった。
2:受信メッセージを格納中に警告エラーを検出した。
1:メッセージを格納するデータ領域長が不足していた。
0:サービスルーチンは正常に終了した。
-1:MSMQアクセスでエラーを検出した。
-2:MSMQアクセス以外でエラーを検出した。
また,インタフェース領域に次の項目が返されます。
-
MSMQのエラーコード(戻り値が-1の場合)
-
表27‒3 詳細コードの内容(戻り値が2または-2の場合)
-
メッセージクラス
メッセージクラスが返されます。
通常メッセージを受信した場合は,LOW-VALUEが返されます。
それ以外のメッセージを受信した場合は,メッセージクラスのコードが返されます。詳細は,MSMQのマニュアルを参照してください。
-
優先順位
メッセージの優先順位が0〜7の範囲で返されます。
-
配信方法
メッセージの配信方法が返されます。
高速メッセージとして配信された場合は0が,回復不能メッセージとして配信された場合は1が返されます。
-
ジャーナリング
受信したメッセージのジャーナリングフラグ(ジャーナリングするかどうか)の設定が返されます。
ジャーナリングフラグが設定されていた場合は1が,設定されていなかった場合は0が返されます。
-
配信不能メッセージ
受信したメッセージの配信不能メッセージフラグ(配信不能キューへ格納するかどうか)の設定が返されます。
配信不能メッセージフラグが設定されていた場合は1が,設定されていなかった場合は0が返されます。
-
- 規則
-
-
データパラメタ領域のデータ名2には受信したメッセージのラベルのデータ長が,バイト数で返されます。また,データ名3には受信したメッセージのラベルが返されます。
-
データパラメタ領域のデータ名4には,データ名5のメッセージデータのデータ長を指定します。指定できる最大データ長は,4,096,000バイトです。指定するデータ長には,実際にキューから受信するメッセージ本文のデータサイズ分が必要です。CBLMQSENDMSGサービスルーチンでメッセージを送信するとき,実際にキューに格納されるメッセージ本文のデータサイズについては,「27.2.5 メッセージを送信する(CBLMQSENDMSG)」の規則を参照してください。また,MSMQエクスプローラなどでメッセージ本文のデータサイズを確認することもできます。
-
データパラメタ領域のデータ名5のデータ長よりキューから受信したメッセージ本文のデータサイズが短かった場合,データ名5に受信したメッセージ本文のデータが,データ名4に受信したメッセージ本文のデータサイズが,それぞれ返されます。ただし,インタフェース領域のデータ変換フラグに有効(テキストデータに変換)を指定した場合,データ名5には受信したメッセージ本文のデータがテキストデータに変換されて格納され,データ名4にはデータ名5に格納されたテキストデータのデータ長が返されます。
-
データパラメタ領域のデータ名5のデータ長よりキューから受信したメッセージ本文のデータサイズが長かった場合,データ名4に受信したメッセージ本文のデータサイズが返され,サービスルーチンの戻り値が1となります。このとき,データ名2,データ名3,データ名5,およびインタフェース領域には何も返されません。
-
キューから受信したメッセージのラベル,またはメッセージ本文のデータを格納中にサービスルーチンがデータエラーを検出した場合,サービスルーチンの戻り値が2となります。この場合,キューから受信したメッセージのラベル,またはメッセージ本文のデータは,テキストデータに変換されないで格納されます。
-
このサービスルーチンを実行する場合,あらかじめCBLMQOPENサービスルーチンを使って,メッセージを受信するキューをRECEIVEモードでオープンしておく必要があります。
-