COBOL2002 ユーザーズガイド


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モードでオープンしておく必要があります。