2016-09-01 5 views
1

Я с использованием Laravel очередей с использованием драйвера базы данных и супервизора, чтобы держать работника очереди работает все время:Запуск нескольких рабочих очередей Laravel с помощью супервизора

[program:laravel_queue] 
command=php artisan queue:listen --timeout=1800 --tries=5 
directory=/var/app/current 
stdout_logfile=/var/app/support/logs/laravel-queue.log 
logfile_maxbytes=0 
logfile_backups=0 
redirect_stderr=true 
autostart=true 
autorestart=true 
startretries=86400 
EOB 

Некоторые из задач очереди может занять около 10 минут.

У меня есть 2 части на вопрос:

1) Как я могу редактировать вышеуказанный скрипт для запуска нескольких (например, 3) рабочих очереди на одной и той же очереди.

2) Есть ли способ масштабирования числа работающих в очереди работающих на основе количества заданий, ожидающих обработки?

Причина вопроса 2 заключается в том, что у нас есть партии напряженного времени, а затем много тихих времен, поэтому я не хочу тратить ресурсы на 3 слушателя, которые работают все время.

ответ

2

В супервизора вы указываете количество процессов с параметром numprocs, так что вы можете добавить строку в скрипт, который говорит:

numprocs=5

сейчас , вы можете сделать некоторые умные вещи, например, если только некоторые из процессов, которые работают в очередях, занимают слишком много времени, вы можете создать другой набор процессов очередей для работы с этими и другими наборами для легких процессов. Для этого вы можете создать конфигурацию супервизора с одним именем очереди, например --queue=longprocess, а другое с --queue=lightprocess, а в вашей программе вы отправите задание в соответствующую очередь. Таким образом, длинные процессы не будут задерживать короткие процессы.

Вы также можете указать queue priorities в одном конфигурационном файле супервизора, таком как --queue=lightprocess,longprocess. Таким образом, ваш работник (ов) сначала ищет lightprocess перед запуском longprocess.

Чтобы ответить на ваш второй вопрос, нет, с точки зрения супервизора все процессы запущены, он не знает, занята или нет в очереди, поэтому она не может убивать процессы и создавать их на основе их использования, поэтому Нет, вы не можете иметь динамическую конфигурацию для создания большего количества процессов только тогда, когда у вас есть занятые.

Примечание. Если вы назначили более 1 numprocs, вы должны добавить количество процессов к имени. В соответствии с документами диспетчера супервизора:

Супервизор запускает как можно больше экземпляров этой программы по имени numprocs. Обратите внимание, что если numprocs> 1, выражение process_name должно содержать% (process_num) s (или любое другое допустимое строковое выражение Python, которое включает в себя process_num) внутри него.

конфигурации супервизора документы: http://supervisord.org/configuration.html

0

От Laravel docs вы можете использовать numprocs=3 для создания 3 процессов.

А также указать очередь: command=php artisan queue:listen --queue=myqueue --tries=5

 Смежные вопросы

  • Нет связанных вопросов^_^