MessageQueueDirector説明書
目次 索引 前ページ次ページ

第1部 基本機能編> 第8章 プログラムインタフェース> 8.3 C言語インタフェース> 8.3.1 各インタフェースの説明

8.3.1.21 mqd_getmsgex (複数のメッセージキューからメッセージを受信する)

機能説明

 指定した複数のメッセージキューのいずれかのメッセージキューよりメッセージを受信します。

記述形式

---------------------------------------------------------------------------------------
      #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)
---------------------------------------------------------------------------------------

パラメタ

queuegroup

 mqd_connectqex関数から返されたメッセージキューグループへのポインタをそのまま指定します。

mode

 メッセージがない場合の対処を指定します。

  MQD_Q_MODE_ASYNC: 非同期モード

メッセージキューグループ内のすべてのメッセージキューにメッセージがない場合には、すぐに復帰します。

  MQD_Q_MODE_SYNC: 同期モード

メッセージキューグループ内のいずれかのメッセージキューにメッセージが到着するまで待ちます。

cond

 メッセージの受信中止条件を指定します。

  MQD_Q_COND_ANYQUEUE:

メッセージキューグループ内のいずれかのメッセージキューが、削除・切断・使用禁止またはアクセス禁止の場合、メッセージの受信を中止して復帰します。

  MQD_Q_COND_ALLQUEUE:

メッセージキューグループ内のすべてのメッセージキューが、削除・切断・使用禁止またはアクセス禁止の場合、メッセージの受信を中止して復帰します。

queindex

 メッセージキューのインデックスが通知されます。インデックスは、mqd_connectqex関数で指定したメッセージキュー名の配列のインデックスで、以下のように通知されます。

 0,1,2,…,n: メッセージキューのインデックス
 -1    : メッセージキューに関係なく異常復帰した場合

mhbuffer

 メッセージヘッダを入力する領域へのポインタを指定します。領域は発行元が用意します。メッセージヘッダ(MQD_MessageHeader構造体)の詳細については、“8.3.2 パラメタの詳細説明”を参照してください。

mbbuffer

 メッセージ本体を入力する領域へのポインタを指定します。領域は発行元が用意します。メッセージ本体(MQD_MessageBody構造体)の詳細については、“8.3.2 パラメタの詳細説明”を参照してください。

mblength

 mbbufferで指定した領域の長さを指定します。

env

 例外処理のための復帰情報へのポインタを指定します。エラー詳細コードに以下の値が返されます。復帰情報(MQD_Environment構造体)の詳細については、“8.4 復帰情報の説明”を参照してください。

復帰値

 本関数の処理結果が以下の復帰値で通知されます。

 正常時: 0
 異常時: -1

注意事項

  1.  本関数を使用する場合は、事前にmqd_connectqex関数でメッセージキューに接続してください。
  2.  同一のメッセージキューグループのポインタを用いて、本関数とmqd_peekmsgex関数を使用することはできません。
  3.  メッセージの受信は、特定のメッセージキューに集中しないようにメッセージが存在するメッセージキューの中から任意に受信します。ただし、受信したメッセージが1ユニット複数メッセージの場合は、1ユニットすべてのメッセージを受信するまで同一のメッセージキューより受信します。
  4.  本関数では、カーソルは使用しません。メッセージキューからは、プライオリティの高い先頭のメッセージから受信します。
  5.  一つのアプリケーションが、複数のメッセージキューから受信する場合、必ずメッセージキューごとにユニット内の全メッセージを受信するようにしてください。
  6.  複数のアプリケーションが、同じメッセージキューから同時に受信することは避けてください。 1ユニット複数メッセージの場合は、処理結果が保証されません。単一メッセージの場合は、先に受信要求を行ったアプリケーションにメッセージが渡ります。
  7.  エラー詳細コード“MQD_ERR_DEADLOCK”は、メッセージ格納ファイルとしてデータベースを使用している場合に、グローバルトランザクション処理中に限り通知されます。
  8.  メッセージがない場合の対処として“同期モード”を指定している、かつ、メッセージの受信中止条件として“すべてのメッセーキュー”を指定している場合の、待ち受けを解除して停止する方法を以下に示します。

  9.  エラー詳細コード“MQD_ERR_OTHERTHR”は、Symfoware/RDBトランザクション連携機能を使用している場合に限り通知されます。

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006