首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitMQ & php-amqplib: cunsumer重新连接

RabbitMQ & php-amqplib: cunsumer重新连接
EN

Stack Overflow用户
提问于 2016-09-27 17:28:22
回答 1查看 2.8K关注 0票数 2

我在PHP脚本中有一个消费者工作者。

但是有时RabbitMQ服务器停止运行,

我得到了这个错误:

代码语言:javascript
复制
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块来处理这个错误,以便向我的控制台抛出一个很好的错误,或者在一段时间后尝试重新连接。

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

代码语言:javascript
复制
    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);
}

遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-27 17:53:58

定义连接上的下一个参数

代码语言:javascript
复制
keepalive: true
heartbeat: 15 // An example

这是AMQPStreamConnection::__constructor()的两个最新论点

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

代码语言:javascript
复制
connection_timeout: 10
read_write_timeout: 30

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39721015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档