如何将 Sidekiq 作业排入队列并仅在手动启动时执行它们?

问题描述 投票:0回答:1

我正在开发一个 Ruby on Rails 应用程序,我需要将 Sidekiq 作业排入队列以发送 SMS 消息。但是,我希望这些作业排队但不立即执行。相反,我想控制何时在 Sidekiq 上手动执行这些作业。

class Worker
  include Sidekiq::Worker
  def perform(method_name, *args)
    Services.send(method_name, *args)
  end
end

我能够成功地将作业排队,但我不确定如何阻止它们立即执行。我希望仅当我在 Sidekiq 或我可以制作的任何其他工具上手动运行它们时才执行它们

有没有一种方法可以将作业排队,使它们保留在队列中而不被处理,直到我手动启动 Sidekiq?

ruby-on-rails sidekiq
1个回答
1
投票

为了实现暂停短信通知并手动控制其执行的目标,我必须修改我的 Worker 类来检查确定是否应暂停通知的标志(例如,pause_notifications)。如果设置了该标志,则可以稍后重新安排作业。

这是我当前的实现:

class Worker
  include Sidekiq::Worker

  def perform(method_name, *args)
    if pause_notifications
      # Reschedule the job to be performed 10 minutes later
      self.class.perform_in(10.minutes, method_name, *args)
    else
      Services.send(method_name, *args)
    end
  end
end

在此实现中,当调用perform时,它会检查pause_notifications方法 如果返回

true
,则使用
perform_in
重新安排作业在 10 分钟后执行。否则,它会照常执行
Services.send
方法

© www.soinside.com 2019 - 2024. All rights reserved.