Message Queue Break Programs give us an ability to asynchronously execute commands. A Message Queue Break Program Request Processor can:
Someplace in the job's initial program, the following code needs to execute:
CHGMSGQ MSGQ(JRANDOMMSGQ) DLVRY(*BREAK) PGM(DEVCPANDO/CP0004)
The program CP0004
looks like:
PGM PARM(&MSGQ &MSGQLIB &MSGKEY)
DCL VAR(&MSGQ ) TYPE(*CHAR) LEN( 10)
DCL VAR(&MSGQLIB ) TYPE(*CHAR) LEN( 10)
DCL VAR(&MSGKEY ) TYPE(*CHAR) LEN( 4)
DCL VAR(&MSG ) TYPE(*CHAR) LEN( 78)
DCL VAR(&MSGLEN ) TYPE(*DEC ) LEN(15 5) VALUE(78)
MONMSG MSGID(CPF0000)
RCVMSG MSGQ(&MSGQLIB/&MSGQ) MSGKEY(&MSGKEY) +
RMV(*YES) MSG(&MSG)
SNDPGMMSG MSG(&MSG) TOPGMQ(*EXT) MSGTYPE(*RQS)
RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO)
CALL PGM(QCMDEXC) PARM(&MSG &MSGLEN)
ENDPGM