ActiveMQ キューからデータを消費すると、次の問題が発生します
次のコードを使用します。
$stomp = new Stomp($activeMQURI);
$stomp->subscribe($queue);
while ($stomp->hasFrame()) {
$frame = $stomp->readFrame();
if ($frame) {
$stomp->ack($frame);
}
}
$stomp->hasFrame() が false を返す前に、約 1 ~ 10 個のメッセージをループします。問題は、まだキューに 10,000 件のメッセージがあることです!
確認の後に遅延を入れると、すべてが期待どおりに機能します。
$stomp = new Stomp($activeMQURI);
$stomp->subscribe($queue);
while ($stomp->hasFrame()) {
$frame = $stomp->readFrame();
if ($frame) {
$stomp->ack($frame);
sleep(1);
}
}
これは、消費者 (私のコード) が別のフレームを要求する前に、ActiveMQ サーバーが ack を処理する機会がなかったために発生していると考えていました。これが起こっている本当の理由を説明できる人はいますか?