JMS学习8 - 测试Message的JMSReplyTo属性

来源:互联网 发布:四量指标公式源码 编辑:程序博客网 时间:2024/06/18 04:14

/**
 * 测试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一样,只不过它们遵从的协议不一样,内部构造及其设计也有些区别,但都是消息中间件,发送接收消息的基本功能都是一样的,有空写个试试看。

0 0
原创粉丝点击