您的位置:首页 > 其它

JMS教程(六)

2016-01-11 14:07 197 查看
本次测试一下如何接收消费者回复的消息:

接收回复消息的关键是生产者这边也要注册一个临听器。

生产端:

ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");

Connection connection = factory.createConnection();
connection.start();

// 消息发送到这个Queue
Queue queue = new ActiveMQQueue("testQueue1");
// 消息回复到这个Queue
Queue replyQueue = new ActiveMQQueue("replyQueue1");

final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建一个消息,
Message message = session.createTextMessage("   i'm zy...");
// 并设置它的JMSReplyTo为replyQueue。
message.setJMSReplyTo(replyQueue); // 通过这句代码指定回复的消息传到哪个队列
// 创建生产者
MessageProducer producer = session.createProducer(queue);
// 设置消息的保存模式: 持久化的
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
// 发送消息
producer.send(message);
System.out.println("消息发送成功");

// 创建一个消费者, 来获取接收者回复的消息
MessageConsumer comsumer2 = session.createConsumer(replyQueue);
comsumer2.setMessageListener(new MessageListener() {
public void onMessage(Message m) {
try {
System.out.println("接收到的回复信息:"+((TextMessage) m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});


消费端:

ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();

// 创建会话                                                                                                  false表示可以回送信息
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建一个目的地,它用来接收消息
Destination destination = session.createQueue("testQueue1");

// 创建消费者
MessageConsumer comsumer = session.createConsumer(destination);
comsumer.setMessageListener(new MessageListener() {
public void onMessage(Message m) {
try {
// 输出接收到的消息
System.out.println("Consumer get " + ((TextMessage) m).getText());
System.out.println("回复的目标:" + m.getJMSReplyTo());
// 发送一个回复
// 创建一个新的MessageProducer来发送一个回复消息。
MessageProducer producer = session.createProducer(m.getJMSReplyTo()); // m.getJMSReplyTo()
// 取出回复消息的队列
producer.send(session.createTextMessage("Hello i'm receiver"));
System.out.println("回复成功");
} catch (JMSException e) {
e.printStackTrace();
}
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: