ActiveMQ之JMSReplyTo

在下面的例子中,首先创建两个Queue,发送者给一个Queue发送,接收者接收到消息之后给另一个Queue回复一个Message,然后再创建一个消费者来接受所回复的消息。
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;

public class MessageSendReceiveAndReply {

public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");

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

//消息发送到这个Queue
Queue queue = new ActiveMQQueue("testQueue");

//消息回复到这个Queue
Queue replyQueue = new ActiveMQQueue("replyQueue");

final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

//创建一个消息,并设置它的JMSReplyTo为replyQueue。
Message message = session.createTextMessage("Andy");
message.setJMSReplyTo(replyQueue);

MessageProducer producer = session.createProducer(queue);
producer.send(message);

//消息的接收者
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
//创建一个新的MessageProducer来发送一个回复消息。
MessageProducer producer = session.createProducer(m.getJMSReplyTo());
producer.send(session.createTextMessage("Hello " + ((TextMessage) m).getText()));
} catch (JMSException e1) {
e1.printStackTrace();
}
}

});

//这个接收者用来接收回复的消息
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();
}
}
});
}

}
首先消息生产者发送一个消息,内容为“Andy”, 然后消费者收到这个消息之后根据消息的JMSReplyTo,回复一个消息,内容为“Hello Andy‘。 最后在回复的Queue上创建一个接收回复消息的消费者,它输出所回复的内容。
运行上面的程序,可以得到下面的输出结果:
Hello Andy

时间: 2024-12-28 10:57:55

ActiveMQ之JMSReplyTo的相关文章

activemq的几种基本通信方式总结

简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activemq是JMS消息通信规范的一个实现.总的来说,消息规范里面定义最常见的几种消息通信模式主要有发布-订阅.点对点这两种.另外,通过结合这些模式的具体应用,我们在处理某些应用场景的时候也衍生出来了一种请求应答的模式.下面,我们针对这几种方式一一讨论一下. 基础流程 在讨论具体方式的时候,我们先看看使用ac

ActiveMQ 消息服务(二)

本文介绍ActiveMQ的几种通信方法: 本文转自:http://shmilyaw-hotmail-com.iteye.com/blog/1897635  这篇文章总结的太好了,不得不转啊! 简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列 Activemq的基本通信方式进行探讨.activemq是JMS消息通信规范的一个实现.总的来说,消息规范里面定义最常见的几种消息通信模式主要有 发布-订阅.点

【转】activemq的几种基本通信方式总结

原文出处:http://shmilyaw-hotmail-com.iteye.com/blog/1897635 简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activemq是JMS消息通信规范的一个实现.总的来说,消息规范里面定义最常见的几种消息通信模式主要有发布-订阅.点对点这两种.另外,通过结合这些模式的具体应用,我们在处理某些应用场景的时候也衍生出来

ActiveMQ之TemporaryQueue和TemporaryTopic

TemporaryQueue和TemporaryTopic,从字面上就可以看出它们是“临时”的目的地.可以通过Session来创建,例如: TemporaryQueue replyQueue = session.createTemporaryQueue(); 虽然它们是由Session来创建的,但是它们的生命周期确实整个Connection.如果在一个Connection上创建了两个Session,则一个Session创建的TemporaryQueue或 TemporaryTopic也可以被另一

ActiveMQ笔记——技术点汇总

Table of contents · Introduction to ActiveMQ · Installing ActiveMQ · Message-oriented middleware · JMS specification · What's the Java Message Service? · JMS client · Non-JMS client · JMS producer · JSM consumer · JSM provider · JMS message · JMS dom

ActiveMq 总结(二)

4.2.6 MessageConsumer MessageConsumer是一个由Session创建的对象,用来从Destination接收消息. 4.2.6.1 创建MessageConsumer Java客户端: ActiveMQSession方法: MessageConsumer createConsumer(Destination destination); MessageConsumer createConsumer(Destination destination, String me

ActiveMq 总结(一)

1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行:(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程 都必须正常运行:如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常:(3)点对点通信:客户的一次调用只发送给某个单独的目标对象.     面向消息的中间件(Message Ori

ActiveMQ(17):Message之消息属性与自身的系统消息地址

一.消息属性 ActiveMQ支持很多消息属性,具体可以参见 http://activemq.apache.org/activemq-message-properties.html 常见的一些属性说明 1:Queue的消息默认是持久化的 2:消息的优先级默认是4 3:消息发送时设置了时间戳 4:消息的过期时间默认是永不过期,过期的消息进入DLQ,可以配置DLQ及其处理策略 5:如果消息时重发的,将会标记出来 6:JMSReplyTo标识响应消息发送到哪个Queue 7:JMSCorelation

JMS ActiveMQ研究文档

1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行:(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程 都必须正常运行:如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常:(3)点对点通信:客户的一次调用只发送给某个单独的目标对象. 面向消息的中间件(Message Oriente