Delayed_job - несколько параллельных очередей? - PullRequest
19 голосов
/ 28 февраля 2012

Я использую delayed_job и переехал на новый более мощный сервер.Так что теперь я хотел бы запускать параллельные задания, так как теперь У меня есть POWER! , но я не понимаю, может ли delayed_job запустить несколько параллельных очередей?

В этом вопросе предполагается, что есть именованные очереди, но все ли они запускаются из одной таблицы и, следовательно, являются последовательными?

Внизу @Jesse Wolgamott предлагает вам создать таблицу для каждой очереди, которая затем будет работать параллельно.

Кто-нибудь сделал это, и они могут указать мне, как это делается?

Ответы [ 3 ]

31 голосов
/ 10 апреля 2012

Это возможно, и я делаю это все время. В нашем случае нам нужно несколько заданий для обработки трех видов работ, например, 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 рабочих для любых заданий.

12 голосов
/ 16 августа 2012

С упаковщиком в производстве:

RAILS_ENV=production bundle exec script/delayed_job -n 4 start

или без упаковщика

ruby script/delayed_job -n 4 start

3 голосов
/ 27 июля 2013

Если в качестве механизма запуска заданий вы используете задачи rake, переменная среды QUEUE может использоваться для запуска разных заданий, разделенных очередью.

Пример:

QUEUE=email rake jobs:work
QUEUE=build_data rake jobs:work

Переменная QUEUES позволяет одну очередь из нескольких очередей DJ для конкретного сотрудника.

QUEUES=build_data,email rake jobs:work

Особенно полезно, если вы используете размещенную / облачную среду (например, Heroku), которая дает вам ограниченный доступ к непосредственному запуску сценариев / заданий.

...