Sidekiq积极工作,如何一次运行一份工作? (非并发运行)

时间:2017-02-18 15:17:59

标签: ruby-on-rails sidekiq rails-activejob

所以,我有这个工作,可以多次请求。但是,当我运行sidekiq时,我希望在队列中一次运行一个作业。我无法找到功能或实际执行此操作的方法,请帮助。

2 个答案:

答案 0 :(得分:1)

你基本上可以调整sidekiq所以你的队列工作FIFO,从我正在阅读的是你想要的东西,事情就是sidekiq意味着处理并行进程,但是如果你想要你可以将你的并发改为1那么一个工作只在当时执行或尝试在这里提到的东西。

https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency

答案 1 :(得分:0)

如果要确保一次只运行特定ActiveJob作业的一个实例,请实现互斥锁。像redis-mutex这样的宝石很容易(如果你已经将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