Длительный процесс не может подтвердить сообщение
Возникли проблемы с сокетами 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)