【问题标题】:Sidekiq active job , how to run one job at a time? (non-concurrent run)Sidekiq 活动作业,如何一次运行一项作业? (非并发运行)
【发布时间】:2017-02-18 15:17:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您想确保您的特定 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
    

    【讨论】:

    • 这太棒了
    【解决方案2】:

    您基本上可以调整 sidekiq,以便您的队列工作 FIFO,从我正在阅读的内容来看,这是您想要的,问题是 sidekiq 旨在处理并行进程,但是如果您愿意,您可以将并发更改为 1 这样一个作业仅在当时执行或尝试此处提及的内容。

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

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 2014-11-11
      • 2017-05-20
      • 2017-02-15
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      相关资源
      最近更新 更多