我有一个队列,很多消息发布到该队列(〜10K)。使用php-amqplib
库在codeigniter中通过以下代码连接到多个使用者,
public function processQueue()
{
// Make connection
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Make channel
$channel = $connection->channel();
// Declare queue
$channel->queue_declare(QUEUE_NAME, false, false, false, false);
// PHP callable
$callback = function ($msg) {
//DO MESSAGE PROCESSING HERE
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
$channel->basic_consume(AGENTS_QUEUE_PROCESSING, '', false, true, false, false, $callback);
// While queue is empty, wait
while (count($channel->callbacks)) {
// Wait
$channel->wait();
}
// Close channel and connection
$channel->close();
$connection->close();
}
消息被填充,并被多个此类使用者同时使用。我观察到,剩余5-6k条消息(即消耗了4-5k条消息)后,队列突然变空,消费者闲置并等待更多消息。另外,RabbitMQ管理Web面板上的消息总数在此刻突然下降。
我尝试使用持久参数创建队列,但问题似乎相同。可能是什么问题及其解决方案?