当使用 ActiveMQ 队列中的数据时,我遇到了以下问题
使用以下代码:
$stomp = new Stomp($activeMQURI);
$stomp->subscribe($queue);
while ($stomp->hasFrame()) {
$frame = $stomp->readFrame();
if ($frame) {
$stomp->ack($frame);
}
}
在 $stomp->hasFrame() 返回 false 之前,它只会循环大约 1-10 条消息。问题是队列中还有 10k 条消息!
当我在确认后延迟时,一切都按预期工作:
$stomp = new Stomp($activeMQURI);
$stomp->subscribe($queue);
while ($stomp->hasFrame()) {
$frame = $stomp->readFrame();
if ($frame) {
$stomp->ack($frame);
sleep(1);
}
}
我在想这是因为 ActiveMQ 服务器在消费者(我的代码)请求另一个帧之前没有机会处理 ack。谁能解释发生这种情况的真正原因,也许比睡眠更好的解决方法?