gpt4 book ai didi

ruby-on-rails - Resque:我如何只对一个特定的队列使用特定的工作人员

转载 作者:行者123 更新时间:2023-12-05 06:26:23 24 4
gpt4 key购买 nike

在我的 Rails 5 应用程序中,我使用 resque 和 resque-scheduler 向我的客户发送消息。为此,我为消息创建了不同的队列,并创建了 3 个 worker 来使用队列发送消息。所以,我的问题是如何为一个特定的队列使用一个特定的工作人员。即我有四个队列,如 birthday_checker、reminder_message、appointment_checker、confirmation_message。对于 appointment_checker,我设置了 cron,它将每 56 秒运行一次。为此,我所有的 3 个工作人员都忙于运行 appointment_checker 队列。和其他待处理的队列作业。但是我可以为这个 appointment_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 上提出我的第一个问题,所以请忽略小错误并为我提供上述问题的一些解决方案。谢谢!

最佳答案

ENV['QUEUE'] = '*' 是所有队列的通配符。每个 Queue 都会有您正在排队的类(class)的名称。只需将 * 替换为您要运行的队列的名称即可。

关于ruby-on-rails - Resque:我如何只对一个特定的队列使用特定的工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56182402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com