PHP ampq + rabbit MQ - давно работающий производитель: может отправлять сообщения в уже объявленные очереди, но не может объявлять новые очереди - PullRequest
2 голосов
/ 07 июня 2019

У меня есть «продюсер», который должен работать всегда, но кажется, что примерно через день он все еще может отправлять сообщения в очереди, которые он ранее объявил, но при попытке объявить новую очередь онвзрывается с:

'PhpAmqpLib\Exception\AMQPHeartbeatMissedException' with message 'Missed server heartbeat' in /php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/AbstractIO.php:140

Я думал, что сердцебиение было только для потребителей (так как нет места, чтобы проверить сердцебиение у производителей)?Является ли ошибкой то, что сердцебиение проверяется, когда я не являюсь «потребителем»?

Или мой сценарий также становится «потребителем», когда я объявляю очередь, потому что он должен «потреблять»"обратная связь с сервером о том, что очередь готова к использованию или что-то в этом роде?

Как она настроена в данный момент, какой обходной путь я мог бы периодически использовать, чтобы проверить, взорвется ли queue_declare, если она будет запущена,так что когда мне нужно запустить queue_declare, он неожиданно не взорвется?

Я использую AMQPSSLConnection в самой последней версии (2.9.2), а $connection->isConnected() возвращает true все время.Сердцебиение установлено на 15 секунд.

1 Ответ

1 голос
/ 10 июня 2019

Оказывается, к следующему второстепенному выпуску php-amqplib будет добавлен метод: $connection->checkHeartBeat(); (он был передан репо проекта всего за несколько дней до того, как я опубликовал этот вопрос). Вызов этого регулярно решит проблему.

Между тем, регулярный вызов $connection->wait(null, true); также является рабочим решением.

...