簡體   English   中英

stomp-> hasFrame()返回false,隊列中有消息

[英]stomp->hasFrame() returning false with messages in the queue

當使用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。 任何人都可以解釋為什么會發生這種情況的真正原因,也許是比SLEEP更好的解決方法?

您實際上並沒有指定要使用的客戶端,所以這是一個一般性的答案。 大多數客戶端都會提供定時或無限等待的阻塞接收調用,當消息到達時會返回,或者在定時情況下指示失敗。 代理將消息發送到您的客戶端的速度取決於很多因素,例如目的地上的使用者數量,每個使用者設置的預取大小以及網絡速度等。您的代碼不應期望立即轉機並能夠處理消息流量停滯的情況。 因為我對您的設置一無所知,所以這是我能給出的最佳答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM