В моем приложении rails 5 я использую resque и resque-scheduler для отправки сообщения своему клиенту. Для этого я создал разные очереди для сообщений и создал 3 рабочих для отправки сообщений с использованием очереди.
Итак, вот мой вопрос как я могу использовать одного конкретного работника для одной конкретной очереди.
Т.е. у меня есть четыре очереди, такие как birthday_checker, Remder_Message, Concept_checker, Подтверждение_Message. Для назначения_чекера я устанавливаю cron, он будет запускаться каждые 56 секунд. для этого все мои 3 работника заняты запуском очереди assign_checker. и другие очереди работы в ожидании. но здесь я могу зарезервировать одного работника для этой очереди встречи. так возможно ли это?
Я попытался найти некоторые связанные вопросы в стеке, но я не могу найти конкретные решения для этого.
Вот мой код файла resque.god
rails_env = ENV['RAILS_ENV']
rails_root = File.dirname(__FILE__) + '/..'
num_workers = rails_env == 'production' ? 3 : 2
num_workers.times do |num|
God.watch do |w|
w.dir = "#{rails_root}"
w.name = "resque-#{num}"
w.group = 'resque'
w.interval = 30.seconds
w.env = {"QUEUE"=>"*", "RAILS_ENV"=>rails_env}
w.start = "bundle exec rake -f #{rails_root}/Rakefile environment resque:work"
w.log = "#{rails_root}/log/resque.log"
w.err_log = "#{rails_root}/log/resque_error.log"
# w.uid = 'git'
# w.gid = 'git'
# restart if memory gets too high
w.transition(:up, :restart) do |on|
on.condition(:memory_usage) do |c|
c.above = 350.megabytes
c.times = 2
end
end
# determine the state on startup
w.transition(:init, { true => :up, false => :start }) do |on|
on.condition(:process_running) do |c|
c.running = true
end
end
# determine when process has finished starting
w.transition([:start, :restart], :up) do |on|
on.condition(:process_running) do |c|
c.running = true
c.interval = 5.seconds
end
# failsafe
on.condition(:tries) do |c|
c.times = 5
c.transition = :start
c.interval = 5.seconds
end
end
# start if process is not running
w.transition(:up, :start) do |on|
on.condition(:process_running) do |c|
c.running = false
end
end
end
end
А это код файла lib / tasks / resque_scheduler.rake
namespace :resque do
task :setup => :environment do
require 'resque'
ENV['QUEUE'] = '*'
end
task :setup_schedule => :setup do
require 'resque-scheduler'
Resque.schedule = YAML.load_file('config/resque_schedule.yml')
end
task :scheduler => :setup_schedule
end
Я старался изо всех сил задать свой первый вопрос по stackoverflow, поэтому, пожалуйста, не обращайте внимания на небольшую ошибку и дайте мне какое-то решение для вышеуказанного вопроса.
Спасибо!