Php 跺脚->;hasFrame()返回false,队列中有消息

Php 跺脚->;hasFrame()返回false,队列中有消息,php,activemq,stomp,Php,Activemq,Stomp,使用ActiveMQ队列中的数据时,im遇到以下问题 使用以下代码: $stomp = new Stomp($activeMQURI); $stomp->subscribe($queue); while ($stomp->hasFrame()) { $frame = $stomp->readFrame(); if ($frame) { $stomp->ack($frame); } } 在$stomp->hasFrame()返

使用ActiveMQ队列中的数据时,im遇到以下问题

使用以下代码:

$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。有人能解释一下发生这种情况的真正原因吗?也许是一个比睡眠更好的解决方法吗?

您并没有真正指定要使用的客户端,所以这里有一个一般性的答案。大多数客户端都提供了阻塞接收调用(定时或无限等待),消息到达时将返回该调用,或者在定时情况下指示失败。代理将消息发送到客户端的速度取决于许多因素,例如目标上的使用者数量、每个使用者设置的预取大小以及网络速度等,等等。您的代码不应该期望立即被转换,并且能够处理消息流量暂停的情况。这是我能给出的最好的答案,因为我对你的设置一无所知