【问题标题】:Will Sidekiq perform_in work even with a constantly full queue?Sidekiq perform_in 即使在队列不断满的情况下也能正常工作?
【发布时间】:2017-03-18 05:17:14
【问题描述】:

例如,如果我想在一个小时内完成一项工作并执行“MyWorker.perform_in 1.hour”,但队列中的人太多,以至于即使在一个小时内队列仍然满员,该工作是否会我想在一小时内执行在所需时间执行还是会在队列末尾排队?

【问题讨论】:

    标签: sidekiq


    【解决方案1】:

    来自Sidekiq repository:

    轮询器每 N 秒检查一次 Redis 中的重试或计划集中的作业是否已超过其时间戳并应入队。如果是这样,它只是将作业弹出回其原始队列,以便工作人员可以像任何其他作业一样拾取它。

    只是一个bit farther down:

    def start
      @thread ||= safe_thread("scheduler") do
        initial_wait
    
        while !@done
          enqueue
          wait
        end
        Sidekiq.logger.info("Scheduler exiting...")
      end
    end
    

    调度程序似乎会在预定时间将作业入队,而不是强制工作人员在那个时间开始执行作业。

    一种可能的解决方案是为已安排的作业和未安排的作业设置一个自定义队列。这样,如果计划的作业队列已满,其他队列仍然可以处理作业。 Sidekiq wiki 中提供了有关队列的更多信息,其中更详细地描述了这种类型的设置。

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2020-03-07
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多