Tibco-Rv: как установить двустороннюю связь с использованием API TibRv-Java
Можно ли сделать обратный вызов при отправке сообщения Tbrv с помощью TibRvdTransport->send(msg)
а в подписчике мы можем отправить ответ?
Я хочу отправить "Привет" от издателя, а получатель должен получить его и отправить ответ "Привет". Издатель должен получить этот "Привет" в обратном вызове и распечатать его.
Издательство =>
TibrvRvdTrasport transport= new TibrvRvdTrasport ("12000","127.0.0.1","6000");
TibrvMsg tibMsg = new TibrvMsg();
tibMsg.add("msg" "hello");
tibMsg.setSendSubject(subject);
transport.send(tibMsg);
Подписчик =>
listener = new TibRvListener(tibRvQueue, new TibRvMsgCallback(){
@Override
public void onMsg(TibRvListener listener,TibRvMsg msg){
try{
-----//sendReply("Hi")
}
catch(Exception e){
}
},
new TibRvdTransport("12000","127.0.0.1","6000")),subject,null);
1 ответ
Конечно, вот один из способов сделать это. Обычно вы создаете частную тему "Входящие", которая используется в качестве темы ответа на исходный запрос. Эта папка "Входящие" представляет собой простую уникальную строку. Это может быть что угодно (также "ОТВЕТИТЬ"), но в большинстве случаев полезно иметь уникальный.
Сторона отправителя:
Tibrv.open(Tibrv.IMPL_NATIVE);
TibrvRvdTransport transport = new TibrvRvdTransport ("12000","127.0.0.1","6000");
TibrvMsg request = new TibrvMsg();
request.add("msg", "hello ");
request.setSendSubject("TEST");
request.setReplySubject(transport.createInbox()); // the subject we expect a reply on
System.err.println("sending request: " + request);
TibrvMsg reply = transport.sendRequest(request, 10*1000); // wait 10 seconds for reply
System.err.println("received response: " + reply);
Tibrv.close();
И сторона получателя:
Tibrv.open(Tibrv.IMPL_NATIVE);
TibrvRvdTransport transport = new TibrvRvdTransport ("12000","127.0.0.1","6000");
new TibrvListener( Tibrv.defaultQueue(), new TibrvMsgCallback() {
@Override
public void onMsg(TibrvListener listener, TibrvMsg msg)
{
try {
System.err.println("received request: " + msg );
TibrvMsg reply = new TibrvMsg();
reply.setSendSubject(msg.getReplySubject()); // send response to the 'reply' subject
reply.add("response","world!");
System.err.println("sending response: " + reply );
transport.send(reply);
}
catch (TibrvException e) {
e.printStackTrace();
}
}}, transport, "TEST", null );
TibrvDispatcher dispatcher = new TibrvDispatcher(Tibrv.defaultQueue());
Thread.sleep(100*1000);
dispatcher.destroy();
Tibrv.close();