Ruby on rails Sidekiq在使用多个队列时忽略并发性
我有两个队列:Ruby on rails Sidekiq在使用多个队列时忽略并发性,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我有两个队列:development和ar\u updater。我有一群sidekiq工作人员在不断更新ActiveRecord对象,但有时他们会同时查询记录,而不仅仅是在另一个工作人员更新了它之后。因此,我考虑只创建一个队列,并将其并发性限制为1,以便添加正确的数据 这是我的config/sidekiq.yml文件: development: :concurrency: 10 ar_updater: :concurrency: 1 :queues: - development
development
和ar\u updater
。我有一群sidekiq工作人员在不断更新ActiveRecord对象,但有时他们会同时查询记录,而不仅仅是在另一个工作人员更新了它之后。因此,我考虑只创建一个队列,并将其并发性限制为1,以便添加正确的数据
这是我的config/sidekiq.yml
文件:
development:
:concurrency: 10
ar_updater:
:concurrency: 1
:queues:
- development
- ar_updater
然后我有一个简单的工人,看起来像这样:
class ArUpdateWorker
include Sidekiq::Worker
sidekiq_options queue: "ar_updater"
def perform(options)
options = options.transform_keys(&:to_sym)
schedule_id = options[:schedule_id]
progress = options[:progress]
schedule = Schedule.find(schedule_id)
old_progress = schedule.current_progress
schedule.update(current_progress: old_progress + progress)
end
end
有没有办法确保这些工作人员在这个特定队列中一次只运行一个?当多次调用ArUpdateWorker
时,sidekiq似乎忽略了并发性,只是根据需要多次运行该worker,但是如果我将该worker的队列切换到development
,那么它将坚持10的并发性。有点困惑
解决这一问题的唯一方法似乎是使用命令行界面上设置的并发设置运行sidekiq。实际上,您不能这样做。您有一个名为
development
的队列。这可能会让人非常困惑,因为您还有一个名为development
的环境
您的配置将名为“开发”的环境的配置设置为10,而不是队列。sidekiq进程将有一个并发设置,具体取决于环境。不能将该进程设置为具有不同的并发级别
这是一个类似的问题: