拉比特公司;php amqplib:cunsumer重新连接

拉比特公司;php amqplib:cunsumer重新连接,php,rabbitmq,Php,Rabbitmq,我有一个PHP脚本的消费者工作者 但有时RabbitMQ服务器停止运行 我得到这个错误: PHP Fatal error: Uncaught exception 'ErrorException' with message 'fwrite(): send of 19 bytes failed with errno=32 Broken pipe' in /home/user/pusher/rabbitmq-worker/vendor/php-amqplib/php-amqplib/PhpAmqpL

我有一个PHP脚本的消费者工作者

但有时RabbitMQ服务器停止运行

我得到这个错误:

PHP Fatal error:  Uncaught exception 'ErrorException' with message 'fwrite(): send of 19 bytes failed with errno=32 Broken pipe' in /home/user/pusher/rabbitmq-worker/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php:281
我希望能够使用try/catch块来处理这个错误,以便向我的控制台抛出一个不错的错误,或者在一段时间后尝试重新连接

这是我目前掌握的代码:

    while (true) {
try {
    $connection = new AMQPStreamConnection(RABBITMQ_HOST, RABBITMQ_PORT, RABBITMQ_USER, RABBITMQ_PASS);
    $channel = $connection->channel();
    $channel->queue_declare(RABBITMQ_DT_QUEUE, false, true, false, false);
    $channel->basic_qos(null, 11, null);
    echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";

    $callback = function($req) {
     sleep(3);//Some task that takes 3 sec
     };
    $channel->basic_consume(RABBITMQ_QUEUE, '', false, false, false, false, $callback);
   while (count($channel->callbacks)) {
   $channel->wait();
    }
   $channel->close();
    $connection->close();
 } catch (Exception $e) {
sleep(1);
}

缺少什么?

定义连接上的下一个参数

keepalive: true
heartbeat: 15 // An example
这是
AMQPStreamConnection::\uu constructor()

注: 如果您连接到某个远程服务器,我建议设置高超时

connection_timeout: 10
read_write_timeout: 30
UPD:
您可以捕获
ErrorException
并再次尝试连接到服务器

如果出于任何原因(甚至手动)MQ服务器将停止/重新启动,并且不会重新连接,则错误仍然存在。当服务器关闭套接字或tcp连接断开时,您的程序将因错误而停机注意!超时值规则:超时>=心跳*2+2@Jekis,对。最小超时为
心跳*2
。但是为什么
+2