gpt4 book ai didi

php - RabbitMQ 和 php-amqplib : cunsumer reconnect

转载 作者:行者123 更新时间:2023-12-02 04:05:37 26 4
gpt4 key购买 nike

我有一个 PHP 脚本中的消费者 worker 。

但有时 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 block 来处理此错误,以便向我的控制台抛出一个不错的错误,或者尝试在一段时间后重新连接。

这是我到目前为止的代码:

    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::__constructor()的两个最新参数

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

connection_timeout: 10
read_write_timeout: 30

更新:您可以捕获 ErrorException 并尝试再次连接到服务器

关于php - RabbitMQ 和 php-amqplib : cunsumer reconnect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39721015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com