Delayed_job - Несколько параллельных очередей?

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

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

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

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

Ответы

Ответ 1

С сборником в производстве:

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

или без связки

ruby script/delayed_job -n 4 start

Ответ 2

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

Ответ 3

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

Пример:

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

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

QUEUES=build_data,email rake jobs:work

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