Возникли проблемы с сокетами AMQP и реализацией enqueue-php. С обычными, быстро работающими сценариями все в порядке, но если у нас длительный процесс, система не сможет его подтвердить из-за сброшенного сокета.
Пытался играть с биением сердца, но результата недостаточно.
В основном: если я установлю значение пульса по умолчанию: 60 (в настоящее время это 15-30), сценарий ~ 90 с подойдет, но если сценарий станет еще длиннее, соединение снова разорвется.
Нужно лучшее решение, так как возможно наличие 24-часовых + запущенных сценариев (которые невозможно разделить или параллельно)
Не могу найти работающее решение, как оставить сокет открытым или восстановить его после выполнения долго работающего скрипта.
В другом потоке я прочитал, чтобы подтвердить сообщение в начале выполнения, но опять-таки это не крутое решение и не может иметь доверия к системе, что сообщение обрабатывается. Кроме того, у нас есть реализованная стратегия повторных попыток, которая означает, что все долго выполняющиеся процессы повторно выполняются из-за исключения в конце выполнения.
Мы используем последние версии библиотеки php enqueue с ext-amqp.
"require": {
"enqueue/psr-queue": "^0.5",
"enqueue/enqueue": "^0.8",
"enqueue/amqp-ext": "^0.8",
"enqueue/amqp-tools": "^0.8",
},
Выход:
2018-11-16T06:07:53+02:00 ERR (3): Consuming interrupted by exception
======================================================================
The application has thrown an exception!
======================================================================
AMQPException
Library error: a socket error occurred
#0 /var/www/vendor/enqueue/amqp-ext/AmqpConsumer.php(161): AMQPQueue->ack(2)
Задача ещё не решена.
Других решений пока нет …