发布JMS消息后获得响应

时间:2012-08-13 10:50:20

标签: java jms response message

以下代码块用于将一组JMS消息发布到EMS服务器

            for(int i=1;i<=200;i++)
            {

                msg=myMessages.get(i); // myMessages is an Arraylist of TextMessages
                qsender = qsession.createSender((Queue)msg.getJMSDestination());
                qreceiver=qsession.createReceiver((Queue)msg.getJMSDestination());
                temp1 = qsession.createTemporaryQueue();
                responseConsumer = qsession.createConsumer(temp1);
                msg.setJMSReplyTo(temp1);
                msg.setJMSCorrelationID(msg.getJMSCorrelationID()+i);
                qsender.send(msg);

            }

由于这不是我开发的,我对它有一些疑问。

  1. 查询实际上做了什么?是否只是在没有回复的情况下发布消息?
  2. 如果是,我们如何知道响应何时返回以及我们如何计算所花费的时间?
  3. 我们如何计算消息到达那里的总时间以及回复的响应?
  4. 如果需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

  

它是否仅在没有回复的情况下发布消息?

是肯定的。它还会创建一个发送邮件的发件人和一个它似乎没有使用的接收者。

  

如果是,我们如何知道响应何时返回以及我们如何计算所花费的时间?

它为此创建一个临时队列和接收器。它期望另一端将消息发送到存储在“JMSReplyTo”

中的队列名称
  

我们如何计算消息到达那里的总时间以及回复的响应?

您可以让消费者获得时间并将其与发送第一封邮件的时间相匹配。

恕我直言更简单的方法是添加作为属性发送的时间并让服务返回此状态。这样,您就可以在消息中找到所需的所有信息。

答案 1 :(得分:0)

回答你的问题:

  1. 是的,它只发布消息;

  2. 通过实施MessageListener确实知道何时收到消息,然后每次调用onMessage()方法时,都会准备好处理新消息;

  3. 要回答第三个问题有点复杂,但您可能希望在发布消息时以及收到响应时(根据correlationId,在某种持久存储中记录或写入)然后,您可以知道每条消息已经过了多长时间);

  4. 此致

    ÿ。