PHP Ampqlib Consumer Dies:读取数据时出错。收到0而不是预期的1个字节

时间:2015-08-10 15:52:49

标签: php rabbitmq php-amqplib

好的,这是Symfony2 Commandline脚本的一部分。当脚本等待时,它会因此异常而死亡。

onClickListener

我搜索了google,发现提到了heartbeat和set_time_out,但是当我尝试在构造函数中设置时,相反,当我从默认值中更改它时,它会死得更快。

这是我的脚本设置方式。对于它的Amqplib方面。

[PhpAmqpLib\Exception\AMQPRuntimeException]
    Error reading data. Received 0 instead of expected 1 bytes

这是来自AMQPStreamConnection.php,它有构造函数。 AMQPConnection扩展了AMQPStreamConnection

    // Get the configuration options for RabbitMQ
        $queueConfig = $this->getApplication()->getKernel()->getContainer()->getParameter("rabbit_mq");

    /**
     * Callback function for RabbitMQ
     * Everything in the callback function must remain in the call back function.
     */
    $callback = function($msg)
    {
      $msgObj = json_decode($msg->body, true);
      print_r($msgObj);
    };

    $connection = new AMQPConnection(
        $queueConfig['response']['host'],
        $queueConfig['response']['port'],
        $queueConfig['response']['username'],
        $queueConfig['response']['password'],
        '/'
      );

    $channel = $connection->channel();

    $queueName = 'myQueueName';

    $channel->basic_consume($queueName, '', false, true, false, false, $callback);

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

关于如何摆脱错误的想法?

1 个答案:

答案 0 :(得分:2)

这个问题的原因是我们使用的是亚马逊的负载均衡器,并且它在某个时间间隔内终止了我们的连接。我所做的是被黑客攻击一个循环,以便在失败时重启消费者。