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

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

Другие вопросы по тегам