У меня проблема с системой очередей laravel. В целях повышения производительности мы используем систему очередей laravel с amazons SQS для более сложных вычислений. Это прекрасно работает, по крайней мере, для большинства наших работ. Некоторые из них, где время необработанного вычисления составляет около 25 секунд, продолжают блокировать очередь в состоянии «Обработка» на 6 минут.
Мы записали в журнал полную функцию handle
задания, и результат был прямо на любое время. На самом деле последний лог-оператор (конец функции) был напечатан через 20 секунд после входа в функцию. Данные были рассчитаны, как и ожидалось, и база данных была обновлена, но задание все еще было «Обработка».
После того, как мы намеренно потерпели крах в В конце функции-дескриптора вычисленные данные были сохранены идеально, но, очевидно, очередь также потерпела крах. Так что я думаю, что это должно быть что-то случайное после функции дескриптора. Может быть, что-то с выделенной памятью?
Конфигурация очереди - это конфигурация драйвера sqs по умолчанию:
'sqs' => array(
'driver' => 'sqs',
'key' => env('AWS_KEY', 'secret'),
'secret' => env('AWS_SECRET', 'secret'),
'queue' => env('AWS_SQS_QUEUE', 'secret'),
'region' => env('AWS_SQS_REGION', 'secret'),
),
Редактировать: я обнаружил, что это не только очередь, но когда я выполнить задание в виде команды, появляется такое же поведение:
Я печатаю «Готово». как последний оператор в команде и после того, как она напечатана, консоль останавливается на несколько секунд, прежде чем вернуться к вводу консоли.
Когда я комментирую в той части, где больше всего запросов, проблема исчезла, например, чем больше запросов я использую, тем больше мне приходится ждать консоли.
Я надеюсь, что любой из вас, ребята, знает, что вызывает такое поведение и как мы можем исправить это.
Заранее спасибо