Введение
В этой статье мы рассмотрим следующие моменты:
- Как удалить запланированное задание Sidekiq.
- Как обновить временную метку существующего задания Sidekiq.
- Что делать, если вам нужно отправить задания, которые должны быть выполнены через длительный период времени, и у вас недостаточно памяти для хранения всех заданий в очереди 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, хранящиеся в базе данных, были удалены.
Примечание. Повторные попытки и пакеты заданий также должны обрабатываться.