機能説明
指定した複数のメッセージキューのいずれかのメッセージキューよりメッセージを受信します。
記述形式
#include "mqdapi.h" int mqd_getmsgex(MQD_MessageQueueex *queuegroup, int mode, int cond, int *queindex, MQD_MessageHeader *mhbuffer, MQD_MessageBody *mbbuffer, long mblength, MQD_Environment *env)
パラメタ
mqd_connectqex関数から返されたメッセージキューグループへのポインタをそのまま指定します。
メッセージがない場合の対処を指定します。
メッセージキューグループ内のすべてのメッセージキューにメッセージがない場合には、すぐに復帰します。
メッセージキューグループ内のいずれかのメッセージキューにメッセージが到着するまで待ちます。
メッセージの受信中止条件を指定します。
メッセージキューグループ内のいずれかのメッセージキューが、削除・切断・使用禁止またはアクセス禁止の場合、メッセージの受信を中止して復帰します。
メッセージキューグループ内のすべてのメッセージキューが、削除・切断・使用禁止またはアクセス禁止の場合、メッセージの受信を中止して復帰します。
メッセージキューのインデックスが通知されます。インデックスは、mqd_connectqex関数で指定したメッセージキュー名の配列のインデックスで、以下のように通知されます。
0,1,2,…,n:メッセージキューのインデックス
-1:メッセージキューに関係なく異常復帰した場合
メッセージヘッダを入力する領域へのポインタを指定します。領域は発行元が用意します。メッセージヘッダ(MQD_MessageHeader構造体)の詳細については、“8.3.29 パラメタの詳細説明”を参照してください。
メッセージ本体を入力する領域へのポインタを指定します。領域は発行元が用意します。メッセージ本体(MQD_MessageBody構造体)の詳細については、“8.3.29 パラメタの詳細説明”を参照してください。
mbbufferで指定した領域の長さを指定します。
例外処理のための復帰情報へのポインタを指定します。エラー詳細コードに以下の値が返されます。復帰情報(MQD_Environment構造体)の詳細については、“8.4 復帰情報の説明”を参照してください。
MQD_ERR_SYNTAX
MQD_ERR_NOSYSTEM
MQD_ERR_NOCONNECT
MQD_ERR_INVALIDAPI
MQD_ERR_DOWNRCV
MQD_ERR_DEADLOCK
MQD_ERR_BACKOUT
MQD_ERR_IO
MQD_ERR_NOMEMORY
MQD_ERR_PROCESSOVER
MQD_ERR_BUFFERLACK
MQD_ERR_TRANFILE
MQD_ERR_MSGFILE
MQD_ERR_UNITMSGOVER
MQD_ERR_UNITSUMOVER
MQD_ERR_MSGBODYLENGTH
MQD_ERR_GETMODE
MQD_ERR_GETCOND
MQD_ERR_OTHERTHR
MQD_ERR_NOQUE
MQD_ERR_NOMSG
MQD_ERR_QUERINHIBIT
MQD_ERR_PURGEMSG
MQD_ERR_UNITNOTCONT
MQD_ERR_NOCONNECTQUE
復帰値
本関数の処理結果が以下の復帰値で通知されます。
正常時:0
異常時: -1
注意事項
本関数を使用する場合は、事前にmqd_connectqex関数でメッセージキューに接続してください。
同一のメッセージキューグループのポインタを用いて、本関数とmqd_peekmsgex関数を使用することはできません。
メッセージの受信は、特定のメッセージキューに集中しないようにメッセージが存在するメッセージキューの中から任意に受信します。ただし、受信したメッセージが1ユニット複数メッセージの場合は、1ユニットすべてのメッセージを受信するまで同一のメッセージキューより受信します。
本関数では、カーソルは使用しません。メッセージキューからは、プライオリティの高い先頭のメッセージから受信します。
一つのアプリケーションが、複数のメッセージキューから受信する場合、必ずメッセージキューごとにユニット内の全メッセージを受信するようにしてください。
複数のアプリケーションが、同じメッセージキューから同時に受信することは避けてください。 1ユニット複数メッセージの場合は、処理結果が保証されません。単一メッセージの場合は、先に受信要求を行ったアプリケーションにメッセージが渡ります。
エラー詳細コード“MQD_ERR_DEADLOCK”は、メッセージ格納ファイルとしてデータベースを使用している場合に限り通知されます。
メッセージがない場合の対処として“同期モード”を指定している、かつ、メッセージの受信中止条件として“すべてのメッセーキュー”を指定している場合の、待ち受けを解除して停止する方法を以下に示します。
メッセージキューグループのすべてのメッセージキューをアクセス禁止にする。
メッセージキューグループ内のメッセージキューに“停止”を指示するメッセージを送信する。
エラー詳細コード“MQD_ERR_OTHERTHR”は、mqd_connectrdb関数を使用してMQDに接続している場合に限り通知されます。