一段时间后,RabbitMQ消费者增加了一倍

时间:2019-04-15 14:09:36

标签: php rabbitmq consumer php-amqplib

我们正在使用RabbitMQ v3.7.5,AMQP 0.9.1,Erlang 20.1.7.1,PHP 7,centos 7

我们的消费者是使用php-amqplib v2.9.1编写的

我们通过使用curl调用URL来开始我们的消费者。使用者有时会按预期工作,但是一段时间后,所有使用者都会加倍,即表示同一使用者正在运行两个连接。一旦发生这种情况,当队列上有数据时,没有任何使用者响应,但是队列上接收到的所有数据都会丢失。

有人遇到过同样的问题吗?

消费者代码(我使用的是官方网站上的相同代码:https://www.rabbitmq.com/tutorials/tutorial-two-php.html

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('task_queue', false, true, false, false);

echo " [*] Waiting for messages. To exit press CTRL+C\n";

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "\n";
    sleep(substr_count($msg->body, '.'));
    echo " [x] Done\n";
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};

$channel->basic_qos(null, 1, null);
$channel->basic_consume('task_queue', '', false, false, false, false, $callback);

while (count($channel->callbacks)) {
    $channel->wait();
}

$channel->close();
$connection->close();

预期结果:不应复制使用者。

0 个答案:

没有答案