1

我是 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();
    }
}  

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

4

2 回答 2

1

通常,您会设置 reply-to jms 标头,然后无论您在何处使用该消息(例如,肯定是在不同的会话中......),您都可以拉出作为临时目标的 JMSReplyTo 标头并回复它。

你应该检查 ActiveMQ wiki:

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

于 2013-10-31T14:07:29.023 回答
0

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

于 2013-10-31T13:42:08.680 回答