Это возможно, и я делаю это все время. В нашем случае нам нужно несколько заданий для обработки трех видов работ, например, queue_a, queue_b и queue_c. Система сделает записи в таблице delayed_job и в очереди с соответствующим именем.
Запуск нескольких отложенных заданий, таких как
RAILS_ENV=production script/delayed_job -i first --queue=queue_a start
RAILS_ENV=production script/delayed_job -i second --queue=queue_a start
RAILS_ENV=production script/delayed_job -i third --queue=queue_b start
RAILS_ENV=production script/delayed_job -i fourth --queue=queue_c start
Каждая команда создаст delayed_job, поэтому теперь будет 4 параллельных задания, два из которых обслуживают queue_a и по одному для queue_b и queue_c. Ключевым моментом здесь является идентификатор, который передается через опцию -i
, которая указывает имя экземпляра, и мы можем запускать и останавливать задания по мере необходимости.
Другой вариант - использовать рабочие пулы.
RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start
Эта команда запустит 1 рабочего для очереди отслеживания, 2 рабочих для почтовых программ и очередей задач и 2 рабочих для любых заданий.