Как указать одного работника в очереди для отложенных заданий

#ruby-on-rails #ruby #heroku #delayed-job

#ruby-on-rails #ruby #heroku #отложенное задание

Вопрос:

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

 # Use the --pool option to specify a worker pool. You can use this option 
# multiple times to start different numbers of workers for different queues.
# The following command will start 1 worker for the tracking queue, 
# 2 workers for the mailers and tasks queues, and 2 workers for any jobs:

RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start
  

Но поскольку мы используем heroku, мы используем procfile, который будет запускать наших рабочих:

worker: bundle exec foreman start -f Procfile.workers и наш рабочий файл запускает задания:

 worker_1: bundle exec rake jobs:work
worker_2: bundle exec rake jobs:work
  

Однако я хочу сделать что-то вроде:

 bundle exec rake jobs:work --queue=specific_queue
  

и только один работник работает над specific_queue, а другие работники работают над другими очередями.

Как я могу это сделать?

Комментарии:

1. мой ответ сработал для вас?

Ответ №1:

Если вы посмотрите на Process Types and the Procfile документы Heroku, вы найдете этот пример в конце:

Например, используя Ruby, вы можете запускать два типа работников очереди, каждый из которых использует разные очереди:

 worker:        env QUEUE=* bundle exec rake resque:work
urgentworker:  env QUEUE=urgent bundle exec rake resque:work
  

Отложенное задание использует нечто похожее на Resque. Он использует переменные env QUEUE или QUEUES, чтобы указать очередь для этого конкретного работника.

Вы можете проверить это в lib/delayed/tasks.rb исходном коде.

Комментарии:

1. Это произошло. Спасибо

2. @jwill worker: env QUEUE=* bundle exec rake resque:work также будет обрабатывать срочную очередь?