如何从不同会话中的临时队列中获取消息

时间:2013-10-31 11:33:47

标签: java jms activemq messaging

我是jms和activemq的新手。我向activemq中的一个静态队列生成一条消息,并使用getJMSReplyTo回复临时队列。代码如下

ActiveMQConnectionFactory connectionFactory = new  ActiveMQConnectionFactory("tcp://localhost:61616");

    // Create a Connection
    Connection connection = connectionFactory.createConnection();
    connection.start();

    // Create a Session
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);


    // Create the destination (Topic or Queue)
    Destination destination = (Destination)   session.createQueue("PostWithParameter_Queue");

    // Create a MessageConsumer from the Session to the Topic or Queue
    MessageConsumer consumer = session.createConsumer(destination);
    //consumer.setMessageListener(new StaticQueueListener());
    // Wait for a message
    Message message = (Message) consumer.receive();
    MessageConsumer consumer1 = session.createConsumer(message.getJMSReplyTo());
    consumer1.setMessageListener(new ReplyHandler()); 
    consumer.close();
    session.close();

我的回复处理程序如下

@Override
public void onMessage(Message message) {

    try
    {

        System.out.println(message.getStringProperty("status"));
    }
    catch (JMSException e) 
    {
            e.printStackTrace();
    }
}  

现在我从临时队列中获取结果。因为它在同一个会话中。 我的问题是我想使用临时队列名称从不同会话中的临时队列中获取消息。如果我想使用临时队列名称从不同客户端的临时队列中获取消息我将如何做到这一点? 。

2 个答案:

答案 0 :(得分:1)

通常,您可以设置reply-to jms标头,然后在您使用消息的任何地方(例如,当然在不同的会话中),您可以拉出JMSReplyTo标头,它将是临时目的地并且只是回复这一点。

您应该查看ActiveMQ wiki:

http://activemq.apache.org/how-should-i-implement-request-response-with-jms.html

答案 1 :(得分:0)

您的侦听器可以使用您提供的任何JMS会话,它不必与您放置消息的会话相同。