9.2.4 ユーザメッセージ内のデータ
ユーザデータのあるバッファのアドレスは,MQPUT命令のBufferパラメタに指定してください。メッセージ内には任意のデータを入れることができます。ただし,データ長は,メッセージを処理するアプリケーションの効率に影響します。
データの最大長は次に示す項目によって制限されます。
-
キューマネジャのMaxMsgLength属性
-
メッセージを登録するキューのMaxMsgLength属性
-
システムが追加するメッセージヘッダの長さ
デッドレターヘッダであるMQDLH構造体や配布リストヘッダであるMQDH構造体です。
キューマネジャのMaxMsgLength属性は,キューマネジャが処理できるメッセージ長です。TP1/Message Queueのデフォルトは4096000バイトです。この属性を照会するにはキューマネジャオブジェクトにMQINQ命令を使用してください。長大なメッセージに対してはこの値を変更できます。
キューのMaxMsgLength属性は,キューに登録できるメッセージの最大長です。この属性の値よりも大きなメッセージを登録すると,MQPUT命令は失敗します。リモートキューにメッセージを登録する場合には,リモートキュー,あて先までにある中間の転送キュー,および使用するチャネルのMaxMsgLength属性によって成功と失敗が決まります。
MQPUT命令では,メッセージ長はキューおよびキューマネジャのMaxMsgLength属性値以下にしてください。両方の値は別物ですが,キューのMaxMsgLength属性値をキューマネジャ以下にすることをお勧めします。
TP1/Message Queueでは次に示す環境でヘッダ情報を追加します。
-
リモートキューにメッセージを登録する場合
TP1/Message QueueはMQXQH構造体をメッセージに追加します。この構造体にはあて先キューとそれを保持するキューマネジャの名前が記述されます。
-
リモートキューにメッセージを転送できない場合
TP1/Message Queueはデッドレターキューにメッセージを登録します。メッセージにはMQDLH構造体が追加されます。この構造体にはあて先キューの名前とデッドレターキューに登録された理由が記述されます。
-
複数のあて先キューにメッセージを登録する場合
TP1/Message QueueはMQDH構造体をメッセージに追加します。この構造体には,転送キューにある配布リストに属するメッセージのデータが記述されます。最適なメッセージ長を選択するときには,この点を考慮してください。
-
セグメント分割されたメッセージまたはグループ内のメッセージの場合
システムはMQMDE構造体を付加します。
メッセージ長がキューの最大長と同じ場合には,ヘッダが追加されるとメッセージが長大になって,登録操作は失敗します。登録操作失敗の可能性を減らすには,次に示す方法があります。
-
転送キューおよびデッドレターキューのMaxMsgLength属性値よりも,メッセージ長を小さくしてください。少なくとも,MQ_MSG_HEADER_LENGTHの値分小さくしてください。長大な配布リストを使用する場合はさらに小さくしてください。
-
デッドレターキューのMaxMsgLength属性値をそれを保持するキューマネジャの値と同じにしてください。
オブジェクトの属性と定数値については,マニュアル「TP1/Message Queue プログラム作成リファレンス」を参照してください。