如何轮询Active MQ仅10分钟?

时间:2014-08-07 09:15:05

标签: timer activemq polling timertask

我正在使用Active MQ作为消息传递队列。我的要求是轮询队列10分钟,读取所有同时发来的消息,将它们写入文件,保存,然后再读取队列10分钟,依此类推。 PFB代码,

switch(waitIntervalSec) {
            case 0:
                // Wait indefinitely for a message
                msg = consumer.receive();
                break;
            case -1:
                // Don't wait at all.   
                msg = consumer.receiveNoWait();
                break;
            default:
                // Wait up to the specified amount of time for a msg
                msg = consumer.receive(waitIntervalSec);
                break;
        }

但我没有看到轮询效果,调试器没有等待“msg = consumer.receive(waitIntervalSec);”这行10分钟。我想这是因为一旦它读取第一条消息,消费者就会打破......是吗?

所以我还有其他代码,

  Integer endTimeInMiliSec = currentTimeInMiliSec + 10000; //add 10 minutes

  while(currentTimeInMiliSec < endTimeInMiliSec){ 
          msg = consumer.receive();
  }

如何改进此代码?假设它会起作用是否准确和安全?

分享您的输入信息。

1 个答案:

答案 0 :(得分:0)

超时的

receive会等待一条消息或等待时间结束。

在循环内的接收调用中有一些但不是无限的等待时间是个好主意。

所以,你的第二个代码可以工作,但轮询一段时间,比如几秒钟,然后收集所有轮询的消息,写入文件并继续循环。