Laravel Horizon — 1 рабочий обрабатывает более 1 задания одновременно

#laravel #queue #horizon

#laravel #очередь #горизонт

Вопрос:

У меня есть конфигурация супервизора Laravel Horizon, которая поддерживает один процесс. Однако я не могу заставить этот процесс запускать только одно задание за раз. Конфигурация для этого

 'long-running-supervisor' => [
       'connection' => 'redis-long-running',
       'queue' => ['default_long'],
       'balance' => 'simple',
       'processes' => 1,
       'tries' => 1,
       'timeout' => 720
 ],
  

Однако этот процесс default_long перекрывает задания одновременно, а не ждет завершения одного перед запуском другого.

Вывод Horizon (отредактирован для краткости)

 WaistPredictionJob 8039
Queue: default_long | Tags: AppPrediction:620  2020-10-17 19:49:45     29.20s  

WaistPredictionJob 8049
Queue: default_long | Tags: AppPrediction:621  2020-10-17 19:50:11     29.08s

PredictionCompleted 8051
Queue: default | Tags: AppPrediction:620   2020-10-17 19:50:16     0.03s

WaistPredictionJob 8054
Queue: default_long | Tags: AppPrediction:622  2020-10-17 19:50:17     25.77s  

PredictionCompleted 8064
Queue: default | Tags: AppPrediction:621   2020-10-17 19:50:46     0.16s

PredictionCompleted 8074
Queue: default | Tags: AppPrediction:622   2020-10-17 19:51:11     0.03s
  

Ответ №1:

Я понял это.

Я ошибочно думал, что временные метки относятся к моменту завершения заданий, когда на самом деле они представляют, когда задания были поставлены в очередь.

Если вы просмотрите временные метки PredictionCompleted заданий, вы заметите, что WaistPrediciton задания фактически выполняются одно за другим.