我正在使用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();
}
如何改进此代码?假设它会起作用是否准确和安全?
分享您的输入信息。
答案 0 :(得分:0)
receive
会等待一条消息或等待时间结束。
在循环内的接收调用中有一些但不是无限的等待时间是个好主意。
所以,你的第二个代码可以工作,但轮询一段时间,比如几秒钟,然后收集所有轮询的消息,写入文件并继续循环。