Getting a message using signaling

Signaling is available only with WebSphere MQ for z/OS.

This example demonstrates how to use the MQGET call with signaling. This extract is not taken from the sample applications supplied with WebSphere(R) 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 CORRELLID 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 MESSGE 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;