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