【发布时间】:2017-02-18 15:17:58
【问题描述】:
所以,我有这份工作,可以多次申请。但是,当我运行 sidekiq 时,我希望这些作业在队列中一次运行一个作业。我找不到实际执行此操作的功能或方法,请帮助。
【问题讨论】:
标签: ruby-on-rails sidekiq rails-activejob
所以,我有这份工作,可以多次申请。但是,当我运行 sidekiq 时,我希望这些作业在队列中一次运行一个作业。我找不到实际执行此操作的功能或方法,请帮助。
【问题讨论】:
标签: ruby-on-rails sidekiq rails-activejob
如果您想确保您的特定 ActiveJob 作业一次只运行一个实例,请实施互斥锁。使用像 redis-mutex 这样的 gem 很容易(如果你已经在使用 Redis 和 sidekiq):
def perform
RedisMutex.with_lock(:your_lock_name, expire: XXX_SECONDS) do
# do something exclusively
rescue RedisMutex::LockError
Rails.logger.debug "Another job is running, exiting ..."
end
end
【讨论】:
您基本上可以调整 sidekiq,以便您的队列工作 FIFO,从我正在阅读的内容来看,这是您想要的,问题是 sidekiq 旨在处理并行进程,但是如果您愿意,您可以将并发更改为 1 这样一个作业仅在当时执行或尝试此处提及的内容。
https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency
【讨论】: