When the message arrives
When a suitable message arrives, a completion code is returned to the ECB.
The completion code describes one of the following:
When a suitable message is already on the queue, the MQGET call completes
in the same way as an MQGET call without signaling. Also, if an error is detected
immediately, the call completes and the return codes are set.
When the call is accepted and no message is immediately available, control
is returned to the program so that it can continue with other work. None of
the output fields in the message descriptor are set, but the CompCode and Reason parameters are set to MQCC_WARNING
and MQRC_SIGNAL_REQUEST_ACCEPTED, respectively.
For information on what WebSphere MQ can return to your application when it makes
an MQGET call using signaling, see the WebSphere MQ Application Programming Reference.
If the program has no other work to do while it is waiting for the ECB
to be posted, it can wait for the ECB using:
- For a CICS Transaction Server for OS/390 program, the EXEC CICS(R) WAIT EXTERNAL command
- For batch and IMS programs, the z/OS WAIT macro
If the state of the queue or the queue manager changes while the signal
is set (that is, the ECB has not yet been posted), the following actions occur:
- If the queue manager enters the quiescing state, and you used the MQGMO_FAIL_IF_QUIESCING
option, the signal is canceled. The ECB is posted with the MQEC_Q_MGR_QUIESCING
completion code. Without this option, the signal remains set.
- If the queue manager is forced to stop, or is canceled, the signal is
canceled. The signal is delivered with the MQEC_WAIT_CANCELED completion
code.
- If the attributes of the queue (or a queue to which the queue name resolves)
are changed so that get requests are now inhibited, the signal is canceled.
The signal is delivered with the MQEC_WAIT_CANCELED completion code.
Notes:
- If more than one program has set a signal on the same shared queue to
remove a message, only one program is activated by a message arriving. However,
if more than one program is waiting to browse a message, all the programs
can be activated. The rules that the queue manager follows when deciding which
applications to activate are the same as those for waiting applications: for
more information, see the description of the Options field
of the MQGMO structure in the WebSphere MQ Application Programming Reference.
- If there is more than one MQGET call waiting for the same message, with
a mixture of wait and signal options, each waiting call is considered equally.
For more information, see the description of the Options field
of the MQGMO structure in the WebSphere MQ Application Programming Reference.
- Under some conditions, it is possible both for an MQGET call to retrieve
a message and for a signal (resulting from the arrival of the same message)
to be delivered. This means that when your program issues another MQGET call
(because the signal was delivered), there could be no message available. Design
your program to test for this situation.
For information about how to set a signal, see the description of the MQGMO_SET_SIGNAL
option and the Signal1 field in the WebSphere MQ Application Programming Reference.