Я пытаюсь подключиться к Rabbitmq от потребителя PHP с использованием phpamqplib . Соединение иногда молча закрывается. Среднее время до неудачи составляет около пары недель; Я попытался повторить, блокируя порты, выключив потребителя PHP и закрепляя соединение от пользовательского интерфейса Management RabbitMQ - но ни один из них не повторяет ошибку: < /p>
Когда соединение закрыто, потребителю не отправляется событие ошибки. > При перезапуске потребитель воссоединяется без ошибки. Я предполагаю, что проблема в том, что нет сердцебиения, и это, кажется, подтверждается UI Management:
< /p>
Отлично, поэтому мне просто нужно узнать, как включить сердцебиение. Согласно документам RabbitMQ, достаточно , чтобы установить ненулевое сердцебиение с клиентом или сервером.
< em> оба имеют ненулевое сердцебиение.
Я пытаюсь подключиться к Rabbitmq от потребителя PHP с использованием phpamqplib . Соединение иногда молча закрывается. Среднее время до неудачи составляет около пары недель; Я попытался повторить, блокируя порты, выключив потребителя PHP и закрепляя соединение от пользовательского интерфейса Management RabbitMQ - но ни один из них не повторяет ошибку: < /p>
Когда соединение закрыто, потребителю не отправляется событие ошибки. > При перезапуске потребитель воссоединяется без ошибки. Я предполагаю, что проблема в том, что нет сердцебиения, и это, кажется, подтверждается UI Management: < /p> Отлично, поэтому мне просто нужно узнать, как включить сердцебиение. Согласно документам RabbitMQ, достаточно , чтобы установить ненулевое сердцебиение с клиентом или сервером. < em> оба имеют ненулевое сердцебиение.[code]# rabbitmq-diagnostics environment | grep -i heartbeat {heartbeat_interval,100}, {heartbeat,60}, < /code> Вот выдержка из класса, где я создаю соединение, адаптировано из (незарегистрированного) кода I унаследован: < /p> use PhpAmqpLib\Connection\AMQPConnectionConfig; use PhpAmqpLib\Connection\AMQPSSLConnection; use PhpAmqpLib\Connection\AMQPStreamConnection; ... private AMQPStreamConnection $connection; ... $heartbeat = 20; $conconf = new AMQPConnectionConfig(); $conconf->setHeartbeat($heartbeat); $conconf->setKeepalive(true);
# See # https://php-amqplib.github.io/php-amqplib/classes/PhpAmqpLib-Connection-AMQPStreamConnection.html $this->connection = new AMQPStreamConnection( $this->host, $this->port, $this->user, $this->password, '/', # $vhost # $insist - insist on connecting to a specified server, default # value: false, AMQPConnectionConfig::AUTH_AMQPPLAIN, # $login_method, default value null, # $ login_response, default value 'en_US', # $locale, default value 3.0, # $connection_timeout, default value 40.0, # $read_write_timeout, supposed to be at least 2*heartbeat? null, # $context, default value true, # $ keepalive null, # $io, default value # $heartbeat, heartbeat interval; default is 0 which RabbitMQ # recommends against. See # https://www.rabbitmq.com/docs/heartbeats $heartbeat, 0.0, # $channel_rpc_timeout, null, # $ssl_protocol ? $conconf # $config ); [/code] он работает для потребления сообщений до тех пор, пока соединение не упадет, так что кажется, что я близок ...