/**
* 测试Message.JMSReplyTo属性
*
* @author sunjun
*/
public class ReplyTest extends JMSBase {
/**
* 发送消息
*
* @throws Exception
*/
public void testSend() throws Exception {
Connection con = getConnection();
con.start();
Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("queue_1");
MessageProducer producer = session.createProducer(queue);
// 设置回复地址
Queue replyQueue = session.createQueue("queue_1_reply");
TextMessage msg = session.createTextMessage("hello");
msg.setJMSReplyTo(replyQueue);
producer.send(msg);
MessageConsumer consumer = session.createConsumer(replyQueue);
// 接收回复消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
if (message != null && message instanceof TextMessage) {
System.out.println("reply msg:"
+ ((TextMessage) message).getText());
}
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
/**
* 接收消息
*
* @throws Exception
*/
public void testReceive() throws Exception {
final Connection con = getConnection();
con.start();
Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("queue_1");
MessageConsumer consumer = session.createConsumer(queue);
// 接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
if (message != null && message instanceof TextMessage) {
System.out.println("msg:"
+ ((TextMessage) message).getText());
// 发送回复消息
Destination replyQueue = message.getJMSReplyTo();
Session session = con.createSession(false,
Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session
.createProducer(replyQueue);
TextMessage msg = session.createTextMessage("thanks");
producer.send(msg);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ReplyTest test = new ReplyTest();
test.testReceive();
test.testSend();
}
}
通过使用这个replyTo,我们可以通过JMS来实现远程接口调用的功能,就象以前的RabbitMQ一样,只不过它们遵从的协议不一样,内部构造及其设计也有些区别,但都是消息中间件,发送接收消息的基本功能都是一样的,有空写个试试看。