Getting a message using signaling
A code extract that demonstrates how to use the MQGET call with signaling.
Signaling is available only with IBM® MQ for z/OS® .
This extract is not taken from the sample applications supplied with IBM MQ.
%INCLUDE SYSLIB(CMQP);
%INCLUDE SYSLIB(CMQEPP);
:
/*********************************************************/
/* WORKING STORAGE DECLARATIONS */
/*********************************************************/
DCL COMPCODE BINARY FIXED (31);
DCL REASON BINARY FIXED (31);
DCL HCONN BINARY FIXED (31);
DCL HOBJ BINARY FIXED (31);
DCL DATALEN BINARY FIXED (31);
DCL BUFFLEN BINARY FIXED (31);
DCL BUFFER CHAR(80);
⋮
DCL ECB_FIXED FIXED BIN(31);
DCL 1 ECB_OVERLAY BASED(ADDR(ECB_FIXED)),
3 ECB_WAIT BIT,
3 ECB_POSTED BIT,
3 ECB_FLAG3_8 BIT(6),
3 ECB_CODE PIC'999';
⋮
/*********************************************************/
/* LOCAL COPY OF MESSAGE DESCRIPTOR AND GET MESSAGE */
/* OPTIONS */
/*********************************************************/
DCL 1 LMQMD LIKE MQMD;
DCL 1 LMQGMO LIKE MQGMO;
⋮
/*********************************************************/
/* CLEAR ECB FIELD. */
/*********************************************************/
ECB_FIXED = 0;
⋮
/*********************************************************/
/* SET UP MESSAGE DESCRIPTOR AS REQUIRED. */
/* MSGID AND CORRELID IN MQMD SET TO NULLS SO FIRST */
/* AVAILABLE MESSAGE WILL BE RETRIEVED. */
/*********************************************************/
LMQMD.MSGID = MQMI_NONE;
LMQMD.CORRELID = MQCI_NONE;
/*********************************************************/
/* SET UP GET MESSAGE OPTIONS AS REQUIRED. */
/* WAIT INTERVAL SET TO ONE MINUTE. */
/*********************************************************/
LMQGMO.OPTIONS = MQGMO_SET_SIGNAL +
MQGMO_NO_SYNCPOINT;
LMQGMO.WAITINTERVAL=60000;
LMQGMO.SIGNAL1 = ADDR(ECB_FIXED);
/*********************************************************/
/* SET UP LENGTH OF MESSAGE BUFFER. */
/* CALL MESSAGE RETRIEVAL ROUTINE. */
/*********************************************************/
BUFFLEN = LENGTH(BUFFER);
CALL GET_MSG;
/*********************************************************/
/* TEST THE COMPLETION CODE OF THE GET CALL. */
/* TAKE APPROPRIATE ACTION BASED ON COMPLETION CODE AND */
/* REASON CODE. */
/*********************************************************/
SELECT;
WHEN ((COMPCODE = MQCC_OK) &
(REASON = MQCC_NONE)) DO
⋮
CALL MSG_ROUTINE;
⋮
END;
WHEN ((COMPCODE = MQCC_WARNING) &
(REASON = MQRC_SIGNAL_REQUEST_ACCEPTED)) DO;
⋮
CALL DO_WORK;
⋮
END;
WHEN ((COMPCODE = MQCC_FAILED) &
(REASON = MQRC_SIGNAL_OUTSTANDING)) DO;
⋮
CALL DO_WORK;
⋮
END;
OTHERWISE DO; /* FAILURE CASE */
/*********************************************************/
/* ISSUE AN ERROR MESSAGE SHOWING THE COMPLETION CODE */
/* AND THE REASON CODE. */
/*********************************************************/
⋮
CALL ERROR_ROUTINE;
⋮
END;
END;
⋮
DO_WORK: PROC;
⋮
IF ECB_POSTED
THEN DO;
SELECT(ECB_CODE);
WHEN(MQEC_MSG_ARRIVED) DO;
⋮
CALL GET_MSG;
⋮
END;
WHEN(MQEC_WAIT_INTERVAL_EXPIRED) DO;
⋮
CALL NO_MSG;
⋮
END;
OTHERWISE DO; /* FAILURE CASE */
/*******************************************************/
/* ISSUE AN ERROR MESSAGE SHOWING THE COMPLETION CODE */
/* AND THE REASON CODE. */
/*******************************************************/
⋮
CALL ERROR_ROUTINE;
⋮
END;
END;
END;
⋮
END DO_WORK;
GET_MSG: PROC;
/*********************************************************/
/* */
/* HCONN WAS SET BY PREVIOUS MQCONN REQUEST. */
/* HOBJ WAS SET BY PREVIOUS MQOPEN REQUEST. */
/* MD AND GMO SET UP AS REQUIRED. */
/* */
/*********************************************************/
CALL MQGET (HCONN,
HOBJ,
LMQMD,
LMQGMO,
BUFFLEN,
BUFFER,
DATALEN,
COMPCODE,
REASON);
END GET_MSG;
NO_MSG: PROC;
⋮
END NO_MSG;