Введение

В этой статье мы рассмотрим следующие моменты:

  1. Как удалить запланированное задание Sidekiq.
  2. Как обновить временную метку существующего задания Sidekiq.
  3. Что делать, если вам нужно отправить задания, которые должны быть выполнены через длительный период времени, и у вас недостаточно памяти для хранения всех заданий в очереди Sidekiq, например. отправка письма через год

Начало работы

ЧАСТЬ I

Удалить задание Sidekiq:

Sidekiq позволяет запланировать задание, которое будет выполняться в определенное время.
Это делается с помощью расписания, т.е. Sidekiq::ScheduledSet, который содержит все запланированные задания в отсортированном порядке.

Если вы больше не хотите, чтобы задание выполнялось, вы можете удалить задание Sidekiq, используя его идентификатор задания.

Пример:
В случае, если есть пользователь, чья учетная запись деактивирована, и запланирована отправка смс пользователю, когда пользователь деактивирован, мы можем немедленно получить все job_id, связанные с пользователем, и после проверки параметров для работы мы можем удалить его.

Таким образом, мы предотвращаем выполнение задания и отправку смс.

ЧАСТЬ II

Обновите временную метку задания Sidekiq:

Мы можем использовать метод «перепланировать», чтобы обновить метку времени запланированного задания Sidekiq.

Пример:

Если смс было запланировано на 14:00, а теперь его нужно отправить в 16:00, мы можем просто обновить метку времени в соответствии с нашим требованием.

ЧАСТЬ III

SuperSidekiq:

Мы можем хранить задания, которые не нужно выполнять в ближайшее время, в нашей базе данных. Мы можем сделать это следующим образом:

Создайте модель SidekiqJob.

execute_at: будет хранить дату и время, когда задание должно быть выполнено
worker: будет хранить детали рабочего процесса, который должен быть выполнен (например, для отправки sms)
params: будет хранить любую дополнительную информацию требуется работнику для выполнения задания
job_id: будет хранить идентификатор задания Sidekiq

Мы можем ежедневно запускать задание cron, которое будет вызывать работника, который извлечет все задания, которые должны быть запущены на следующий день, и поместит их в запланированный набор SidekiqJob с их отметками времени для выполнения на следующий день.

Мы также можем удалить задания из базы данных, если они не должны выполняться
Пример: SMS, запланированное для отправки в будущем, не должно быть отправлено

Мы можем запланировать обратный вызов, когда учетная запись пользователя будет деактивирована, чтобы эти SidekiqJobs, хранящиеся в базе данных, были удалены.

Примечание. Повторные попытки и пакеты заданий также должны обрабатываться.