The following example of a SAS DATA
step shows how to use the SAS Common Messaging Interface with the
TIBCO Rendezvous transport to send and receive messages using subject-based
addressing.
data _null_;
length msg $ 200;
length qid qid2 tid rc attchflg 8;
length parm1 parm2 parm3 recv1 recv2 recv3 8;
length parm4 recv4 $50;
length map $ 80;
length event $ 10;
tid=0;
rc=0;
put '----';
put 'Call INIT';
CALL INIT(tid, 'RENDEZVOUS', 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 to listen
for and receive messages';
CALL OPENQUEUE(qid, tid, 'test.subject',
'FETCH', rc, "POLL(Timeout=15)");
if rc ^= 0 then do;
put 'OPENQUEUE: failed';
msg = sysmsg();
put msg;
end;
else put 'OPENQUEUE: succeeded';
rc=0;
qid2=0;
put '----';
put 'Call OPENQUEUE for queue2 to send messages';
CALL OPENQUEUE(qid2, tid, 'test.subject',
'DELIVERY', rc);
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('mymap', 'REGISTRY', rc,
'SHORT;LONG;DOUBLE;CHAR,,50');
if rc ^= 0 then do;
put 'SETMAP: failed';
msg = sysmsg();
put msg;
end;
else put 'SETMAP: succeeded';
parm1=100;
parm2=9999;
parm3=9999.1234;
parm4="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
put '----';
put 'Call SENDMESSAGE';
call sendmessage(qid2,rc,"map","mymap" ,
parm1,parm2,parm3,parm4);
if rc ^= 0 then do;
put 'send message failed: ';
msg=sysmsg();
put msg;
end;
else put 'send message succeeded';
rc = 0;
put '----';
put 'Call RECEIVEMESSAGE';
map = "mymap";
call receivemessage(qid, rc, event,
attchflg,"map",map,recv1,recv2,recv3,recv4);
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;
put 'Message has been delivered';
put 'recv1 = ' recv1;
put 'recv2 = ' recv2;
put 'recv3 = ' recv3;
put 'recv4 = ' recv4;
end;
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 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;