Я работаю над приложением 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 вручную?
В моем случае мне нужно, чтобы задания, когда условие не выполнено, оставались в режиме ожидания до тех пор, пока условие не станет истинным.
Хех, это очень важное изменение :) Так что да, просто делайте то, что сделали.
@smathy Теперь меня это устраивает, и хорошо, что я внес изменения, а затем изменил свой вопрос :), может быть, мне следовало ответить?
Ах, круто. Да, было бы хорошо - ответить на свой вопрос.





Чтобы достичь цели приостановки SMS-уведомлений и ручного управления их выполнением, мне пришлось изменить свой класс 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
В этой реализации при вызове выполнения проверяется метод паузы_нотификаций.
Если возвращается true, задание переносится на выполнение через 10 минут с помощью perform_in. В противном случае метод Services.send выполняется как обычно.
Любое задание в очереди будет выполняться только при фактическом запуске Sidekiq.