複数メッセージキューからのメッセージ受信は、指定した複数のメッセージキューのいずれかのメッセージキューよりメッセージを取り出す機能です。複数メッセージキューからのメッセージ受信は、プログラムインタフェースの“MQDGETMSGEX”または“mqd_getmsgex”により行うことができます。メッセージの受信が正常終了するとメッセージはメッセージキューから削除されます。
複数メッセージキューからのメッセージ受信の方法には以下があります。
同期モード
非同期モード
同期モードのメッセージ受信は、指定したメッセージキューのいずれかにメッセージがある場合には、当該のメッセージキューより直ちにメッセージを取り出します。指定したすべてのメッセージキューにメッセージがない場合には、いずれかのメッセージキューにメッセージが到着するまで待ち合わせます。
非同期モードのメッセージ受信は、指定したメッセージキューのいずれかにメッセージがある場合には、当該のメッセージキューより直ちにメッセージを取り出します。指定したすべてのメッセージキューにメッセージがない場合には、メッセージ到着を待ち合わせずにアプリケーションに復帰します。
複数メッセージキューからのメッセージ受信を中止する条件として以下があります。
指定した複数のメッセージキューのいずれかが、削除・切断・使用禁止またはアクセス禁止の場合はメッセージの受信を中止して、アプリケーションに復帰します。
指定した複数のメッセージキューのすべてが、削除・切断・使用禁止またはアクセス禁止の場合はメッセージの受信を中止して、アプリケーションに復帰します。
1ユニット複数メッセージを受信する場合には、メッセージヘッダのユニット終了フラグが“ON”になるまでメッセージを受信した場合に限り受信が完了したとみなされます。途中で処理を打ち切った場合には、それまでの処理は取り消されます。したがって、再度メッセージを受信すると、再び同じユニット内の先頭メッセージから取り出されます。
なお、複数メッセージキューからのメッセージ受信を行う場合は、以下のことに留意する必要があります。
事前に、プログラムインタフェースの“MQDCONNECTQEX”または“mqd_connectqex”によって複数のメッセージキューに接続する必要があります。
一つのアプリケーションで、同一のメッセージキューに対してプログラムインタフェースの“MQDGETMSGEX”と“MQDPEEKMSGEX”を組み合わせて使用することはできません。また、“mqd_getmsgex”と“mqd_peekmsgex”を組み合わせて使用することはできません。
メッセージの受信は、特定のメッセージキューに集中しないようにメッセージが存在するメッセージキューの中から任意に受信します。ただし、受信したメッセージが1ユニット複数メッセージの場合は、1ユニットすべてのメッセージを受信するまで同一のメッセージキューより受信します。
一つのアプリケーションが、1ユニット複数メッセージを複数のメッセージキューから受信する場合、必ずメッセージキューごとにユニット内の全メッセージを受信するようにしてください。これに違反した場合は、処理結果が保証されません。
複数のアプリケーションが、同じメッセージキューから同時に受信することは避けてください。1ユニット複数メッセージの場合は、処理結果が保証されません。単一メッセージの場合は、先に受信要求を行ったアプリケーションにメッセージが渡ります。