|
Application Messaging
Sample Trigger Programsmqclient.sas
data _null_;
length msg $ 200;
length qid2 tid rc 8;
length map $80;
length recv1 $50;
length event $10;
length rpname $256;
length type $8;
length qual1 qual2 $40;
libname out '.';
tid=0;
rc=0;
put '----';
put 'Call INIT';
CALL INIT(tid, 'MQSERIES', rc);
if rc ^= 0 then do;
put 'INIT: failed';
msg = sysmsg();
put msg;
end;
else put 'INIT: succeeded';
rc=0;
qid=0;
put '----';
put 'Call OPENQUEUE to open the response queue';
CALL OPENQUEUE(qid, tid, 'XPQMGR:REPLY', 'fetch',
rc, "POLL(TIMEOUT=20)");
if rc ^= 0 then do;
put 'OPENQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'OPENQUEUE: succeeded';
rc=0;
qid2=0;
put 'Call OPENQUEUE to open the request queue on qid2';
CALL OPENQUEUE(qid2, tid, 'XPQMGR:AIX.TRIGQUEUE',
'DELIVERY', rc, "POLL(Timeout=15)");
if rc ^= 0 then do;
put 'OPENQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'OPENQUEUE: succeeded';
rc=0;
put '----';
put 'Call SETMAP';
CALL SETMAP('mqclientmap', 'REGISTRY', rc, 'CHAR,,50');
if rc ^= 0 then do;
put 'SETMAP: failed';
msg = sysmsg();
put msg;
end;
else put 'SETMAP: succeeded';
parm1="calories";
put '---- Send a message to the request queue qid
requesting the specified dataset -----';
put 'Call SENDMESSAGE';
call sendmessage(qid2,rc,"map, respqueue",
"mqclientmap","R64:D8650",parm1);
if rc ^= 0 then do;
put 'send message failed: ';
msg=sysmsg();
put msg;
end;
else put 'send message succeeded';
slept = sleep(1);
rc = 0;
put '---- receive a dataset from the reply queue ----';
put 'Call RECEIVEMESSAGE';
map = "mqclientmap";
call receivemessage(qid, rc, event,
attchflg,"map", map, recv1);
put 'response queue =' rpname;
put 'qid =' qid;
put 'event = ' event;
put 'attchflg =' attchflg;
if rc ^= 0 then do;
put 'receive message failed: ';
msg=sysmsg();
put msg;
end;
else do;
put 'receive message succeeded';
put "map =" map;
put "recv1 =" recv1;
end;
if event eq 'DELIVERY' then
do;
put 'Message has been delivered';
if attchflg = 1 then
do;
put '---- check for attachments ----';
call getattachment(qid, lastflag, attachid,
type, qual1, qual2, rc);
if rc ^= 0 then do;
put 'get attachment failed: ';
msg=sysmsg();
put msg;
end;
else put 'get attachment succeeded';
if type="DATASET" then
do;
put '--- accept attachment into a dataset ---';
put "qual2 = " qual2;
call acceptattachment(qid, attachid,
"out", qual2, rc);
if rc ^= 0 then do;
put 'accept DATASET failed: ';
msg=sysmsg();
put msg;
end;
else put 'accept DATASET succeeded';
end;
end;
end;
rc=0;
put '----';
put 'Call CLOSEQUEUE for queue1';
CALL CLOSEQUEUE(qid, rc);
if rc ^= 0 then do;
put 'CLOSEQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'CLOSEQUEUE: succeeded';
rc=0;
put '----';
put 'Call CLOSEQUEUE for queue2';
CALL CLOSEQUEUE(qid2, rc);
if rc ^= 0 then do;
put 'CLOSEQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'CLOSEQUEUE: succeeded';
rc=0;
put '----';
put 'Call TERM';
CALL TERM(tid, rc);
if rc ^= 0 then do;
put 'TERM: failed';
msg = sysmsg();
put msg;
end;
else put 'TERM: succeeded';
run;
mqserver.sas
data calories;
input item $ 1 - 16 calories 18-20 ;
datalines;
ground beef 230
hot dog 100
banana 100
broccoli 45
skim milk 50
;
data _null_;
length msg $ 200;
length qid qid2 tid rc 8;
length map $80;
length recv1 $50;
length attachname $21;
length event $10;
length rpname $256;
tid=0;
rc=0;
put '----';
put 'Call INIT';
CALL INIT(tid, 'MQSERIES-C', rc);
if rc ^= 0 then do;
put 'INIT: failed';
msg = sysmsg();
put msg;
end;
else put 'INIT: succeeded';
rc=0;
qid=0;
put '----';
put 'Call OPENQUEUE for queue1';
CALL OPENQUEUE(qid, tid, 'AIX:TRIGQUEUE',
'fetch', rc, "POLL(Timeout=10)");
if rc ^= 0 then do;
put 'OPENQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'OPENQUEUE: succeeded';
rc=0;
put '----';
put 'Call SETMAP';
CALL SETMAP('mqservermap', 'REGISTRY', rc, 'CHAR,,50');
if rc ^= 0 then do;
put 'SETMAP: failed';
msg = sysmsg();
put msg;
end;
else put 'SETMAP: succeeded';
rc = 0;
put '---- recieve a message from the remote queue ----';
put 'Call RECEIVEMESSAGE';
map = "mqservermap";
rpname=' ';
call receivemessage(qid, rc, event, attchflg,"map,
respqueue", map, rpname, recv1);
put 'recv1 =' recv1;
put 'response queue =' rpname;
put 'qid =' qid;
put 'event = ' event;
put 'attchflg =' attchflg;
if rc ^= 0 then do;
put 'receive message failed: ';
msg=sysmsg();
put msg;
end;
else do;
put 'receive message succeeded';
put map;
end;
if event eq 'DELIVERY' then
do;
rc = 0;
qid2=0;
put '---- open the response queue qid2 ----';
put 'Call OPENQUEUE for queue2';
CALL OPENQUEUE(qid2, tid, rpname, 'delivery',
rc, "POLL(Timeout=15)");
if rc ^= 0 then do;
put 'OPENQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'OPENQUEUE: succeeded';
put 'rpname =' rpname;
put '---- send the requested dataset
to the response queue ----';
put 'Call SENDMESSAGE';
attachname = 'dataset,work,' || recv1;
put "attachname = " attachname;
call sendmessage(qid2,rc,"map, attachlist",
"mqservermap",attachname, recv1 );
if rc ^= 0 then do;
put 'send message failed: ';
msg=sysmsg();
put msg;
end;
else put 'send message succeeded';
rc=0;
put '----';
put 'Call CLOSEQUEUE for queue2';
CALL CLOSEQUEUE(qid2, rc);
if rc ^= 0 then do;
put 'CLOSEQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'CLOSEQUEUE: succeeded';
end;
rc=0;
put '----';
put 'Call CLOSEQUEUE for queue1';
CALL CLOSEQUEUE(qid, rc);
if rc ^= 0 then do;
put 'CLOSEQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'CLOSEQUEUE: succeeded';
rc=0;
put '----';
put 'Call TERM';
CALL TERM(tid, rc);
if rc ^= 0 then do;
put 'TERM: failed';
msg = sysmsg();
put msg;
end;
else put 'TERM: succeeded';
run;
|