JMS&ActiveMQ实战- JMSReplyTo

2019-03-28 00:10|来源: 网络

在下面的例子中,首先创建两个Queue,发送者给一个Queue发送,接收者接收到消息之后给另一个Queue回复一个Message,然后再创建一个消费者来接受所回复的消息


  1. import javax.jms.Connection;  

  2. import javax.jms.JMSException;  

  3. import javax.jms.Message;  

  4. import javax.jms.MessageConsumer;  

  5. import javax.jms.MessageListener;  

  6. import javax.jms.MessageProducer;  

  7. import javax.jms.Queue;  

  8. import javax.jms.Session;  

  9. import javax.jms.TextMessage;  

  10. import org.apache.activemq.ActiveMQConnectionFactory;  

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

  12. public class MessageSendReceiveAndReply {  

  13.    public static void main(String[] args) throws Exception {  

  14.        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");  

  15.    

  16.        Connection connection = factory.createConnection();  

  17.        connection.start();  

  18.        

  19.        //消息发送到这个Queue  

  20.        Queue queue = new ActiveMQQueue("testQueue");  

  21.        //消息回复到这个Queue  

  22.        Queue replyQueue = new ActiveMQQueue("replyQueue");  

  23.        

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

  25.        //创建一个消息,并设置它的JMSReplyTo为replyQueue。  

  26.        Message message = session.createTextMessage("Andy");  

  27.        message.setJMSReplyTo(replyQueue);  

  28.        

  29.        MessageProducer producer = session.createProducer(queue);  

  30.        producer.send(message);  

  31.            

  32.        //消息的接收者  

  33.        MessageConsumer comsumer = session.createConsumer(queue);  

  34.        comsumer.setMessageListener(new MessageListener(){  

  35.            public void onMessage(Message m) {  

  36.                try {  

  37.                    //创建一个新的MessageProducer来发送一个回复消息。  

  38.                    MessageProducer producer = session.createProducer(m.getJMSReplyTo());  

  39.                    producer.send(session.createTextMessage("Hello " + ((TextMessage) m).getText()));  

  40.                } catch (JMSException e1) {  

  41.                    e1.printStackTrace();  

  42.                }  

  43.            }  

  44.            

  45.        });  

  46.        

  47.        //这个接收者用来接收回复的消息  

  48.        MessageConsumer comsumer2 = session.createConsumer(replyQueue);  

  49.        comsumer2.setMessageListener(new MessageListener(){  

  50.            public void onMessage(Message m) {  

  51.                try {  

  52.                    System.out.println(((TextMessage) m).getText());  

  53.                } catch (JMSException e) {  

  54.                    e.printStackTrace();  

  55.                }  

  56.            }  

  57.        });  

  58.    }  

  59. }  


首先消息生产者发送一个消息,内容为“Andy”, 然后消费者收到这个消息之后根据消息的JMSReplyTo,回复一个消息,内容为“Hello Andy‘。 最后在回复的Queue上创建一个接收回复消息的消费者,它输出所回复的内容。

运行上面的程序,可以得到下面的输出结果:

  1. Hello Andy  


本文链接:JMS&ActiveMQ实战- JMSReplyTo,领悟书生学习笔记,转自:http://calvinliu.iteye.com/blog/788615

相关问答

更多

ActiveMQ与Spring实现JMS的问题?

Thread.sleep(5000); 延时加载

activemq和jms是种什么关系

JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。而activemq则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者。 jms 的一个标准或者说是一个协议. 通常用于企业级应用的消息传递. 主要有topic 消息(1 对多), queue 消息(1对1)。activemq 是一个jms 的实现, apache 出的. 另外还其它的实现 jboss 。 MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种 ...

针对Android的ActiveMQ和其他FOSS JMS实现(ActiveMQ and other FOSS JMS Implementation for Android)

使用ActiveMQ,您可以使用STOMP作为协议。 它比xmpp简单得多。 似乎没有一个本地stomp执行android(有几个java)。 但规范只有一个页面,所以这不应该成为一个问题。 另一种选择可能是RabbitMQ。 我记得有关Android系统的rabbitMQ库的消息。 With ActiveMQ you could use STOMP as a protocol. its much simpler than xmpp. there doesn't seem to be a nati ...

使用Grizzly和JMS / ActiveMQ(Using Grizzly with JMS/ActiveMQ)

您可以使用TCP适配器/网关(可以选择使用NIO)以及自定义(反)序列化程序。 如果必须使用Grizzly,则可以编写服务器连接工厂实现。 对于出站适配器(或入站网关),端点注册为“TcpListener”(使用connectionId),SI消息包含用于确定哪个连接获得回复的IpHeaders.CONNECTION_ID标头。 连接关闭时,它将取消注册(从地图中删除)。 You could use the TCP adapters/gateways (which have an option t ...

如何在camel route spring DSL中设置JMSCorrelationId和JMSReplyTo头(How to set JMSCorrelationId and JMSReplyTo header in camel route spring DSL)

将以下内容放在中间: <setHeader headerName="JMSCorrelationId"> <constant>myValue</constant> </setHeader> 您可以使用JMSReplyTo标头执行相同的操作。 Its useful for the work that I wanted to do. It helps me in request reply scenario. <route id="Request1"> <from uri ...

使用ActiveMQ进行JMS配置(JMS Configuration with ActiveMQ)

使用正确的后端uri创建一个地址端点,如下所示。 <endpoint xmlns="http://ws.apache.org/ns/synapse" name="Service1EP"> <address uri="http://localhost:8080/services/service1""> <suspendOnFailure> <progressionFactor>1.0</progressionFactor> </suspendOnFai ...

通过activemq JMS运行pentaho作业(Running pentaho jobs through activemq JMS)

我将PDI集成到JAX-RS Web应用程序中没有问题。 从JMS调用作业应该很容易。 在这里您可以找到如何将PDI与java集成: http : //wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+-+Java+API+Examples 对于webapps,你可以在网上找到大量的材料。 There is a JMS consumer comes handy and the corresponding settings (Similar ...

Loadrunner JMS消息(队列到主题)(Loadrunner JMS message (Queue to Topic))

我通常将队列作为Java虚拟用户而不是处理JMS Web服务接口的神秘主义,但偶尔(使用MQ)我会将它们作为Winsock虚拟用户来处理,因为使用套接字比使用套接字要快一些它是在C中思考并转换为Java。 (我是一个本地功能'C'程序员) Thanks, Java Vuser is the way I chose. Started with an Eclipse project and looks good: Steps: Used a template from http://www.myloa ...

Web Socket与JMS或Activemq [已关闭](Web Socket vs JMS or Activemq [closed])

Web套接字是一种在Web浏览器和Web服务器之间提供双向套接字样式接口的方式,服务器能够推送信息,而不是仅响应浏览器HTTP“拉”请求。 这听起来来自你的问题和澄清,这不是你所需要的。 然而,简单套接字是在应用程序之间提供同步通信的好方法。 如果接收到消息的应用程序可以同步处理它们 - 只要它们被发送 - 常规套接字可能是一个很好的解决方案。 消息队列用于异步通信 - 消息在发送后可能需要存储一段时间,然后接收者才能收到消息并对消息进行操作。 由于需要存储,消息队列需要单独的服务器来存储消息,或 ...

Websphere MQ 7 with Spring JMS - 无限传递(Websphere MQ 7with Spring JMS - infinite delivery)

BOTHRESH必须大于或等于1 。 将BOTHRESH设置为0会禁用它。 参考IBM的Paul Titheridge 如何处理WebSphere Application Server处理有害消息 。 当WebSphere MQ是JMS提供程序时默认情况下,使用WebSphere MQ创建的队列将Backout阈值属性(在WebSphere MQ术语中称为BOTHRESH)设置为0.因此,WebSphere MQ的缺省行为永远不会退出有害消息。 BOTHRESH must be greater t ...