The Inquire sample programs
The Inquire sample programs inquire about some of the attributes of a queue using the MQINQ call.
See Features demonstrated in the sample programs for the names of these programs.
These programs are intended to run as triggered programs, so their only input is an MQTMC2 (trigger message) structure for IBM® i, Windows, UNIX and Linux® systems. This structure contains the name of a target queue with attributes that are to be inquired upon. The C version also uses the queue manager name. The COBOL version uses the default queue manager.
For the triggering process to work, ensure that the Inquire sample
program that you want to use is triggered by messages arriving on
queue SYSTEM.SAMPLE.INQ. To do this, specify the name of the Inquire
sample program that you want to use in the ApplicId
field
of the process definition SYSTEM.SAMPLE.INQPROCESS. The
sample queue has a trigger type of FIRST; if there are already messages
on the queue before you run the request sample, the inquire sample
is not triggered by the messages that you send.
- For UNIX, Linux and Windows systems, start the runmqtrm program
in one session, then start the
amqsreq
program in another.
Use the Request sample programs to send request messages, each containing just a queue name, to queue SYSTEM.SAMPLE.INQ. For each request message, the Inquire sample programs send a reply message containing information about the queue specified in the request message. The replies are sent to the reply-to queue specified in the request message.
Design of the Inquire sample program
The program opens the queue named in the trigger message structure that it was passed when it started. (For clarity, we will call this the request queue.) The program uses the MQOPEN call to open this queue for shared input.
The program uses the MQGET call to remove messages from this queue. This call uses the MQGMO_ACCEPT_TRUNCATED_MSG and MQGMO_WAIT options, with a wait interval of 5 seconds. The program tests the descriptor of each message to see if it is a request message; if it is not, the program discards the message and displays a warning message.
For each request message removed from the request queue,
the program reads the name of the queue (which we will call the target
queue) contained in the data, and opens that queue using the
MQOPEN call with the MQOO_INQ option. The program then uses the MQINQ
call to inquire about the values of the InhibitGet
, CurrentQDepth
,
and OpenInputCount
attributes
of the target queue.
If the MQINQ call is successful, the program uses the MQPUT1 call to put a reply message on the reply-to queue. This message contains the values of the three attributes.
If
the MQOPEN or MQINQ call is unsuccessful, the program uses the MQPUT1
call to put a report message on the reply-to queue. In the Feedback
field
of the message descriptor of this report message is the reason code
returned by either the MQOPEN or MQINQ call, depending on which one
failed.
After the MQINQ call, the program closes the target queue using the MQCLOSE call.
When there are no messages remaining on the request queue, the program closes that queue and disconnects from the queue manager.