Длительный процесс не может подтвердить сообщение

Возникли проблемы с сокетами 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)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector