我正在开发一个 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?
为了实现暂停短信通知并手动控制其执行的目标,我必须修改我的 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
方法