0

OK、これは Symfony2 コマンドライン スクリプトの一部です。スクリプトが待機している間、この例外で終了します。

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

Google を検索したところ、heartbeat と set_time_out についての言及が見つかりましたが、コンストラクターで設定しようとすると、代わりにデフォルトから変更すると、より速く終了します。

これが私のスクリプトのセットアップ方法です。そのAmqplibの側面について。

    // 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();
    }

これは、コンストラクタを持つ AMQPStreamConnection.php からのものです。AMQPConnection は AMQPStreamConnection を拡張します

public function __construct($host, $port,
                            $user, $password,
                            $vhost="/",$insist=false,
                            $login_method="AMQPLAIN",
                            $login_response=null,
                            $locale="en_US",
                            $connection_timeout = 3,
                            $read_write_timeout = 3,
                            $context = null)

エラーを取り除く方法について考えていますか?

4

1 に答える 1

2

この問題の原因は、Amazon のロード バランサーを使用していて、一定の時間間隔で接続が切断されていたためです。私がしたことは、while ループをハッキングして、失敗したときにコンシューマを再起動することでした。

于 2015-10-16T18:15:46.403 に答える