2015-01-29 3 views
2

Я играю с Rails 4.2 приложение, которое использует ActiveJob при поддержке resque/sidekiq для рассылки электронной почты. Когда пользователь создает кампанию рассылки, новое задание создается и назначается на определенную дату. Это здорово, но что происходит, когда пользователь меняет дату доставки.Эффективно reschedule ActiveJob (resque/sidekiq)

В этом случае каждое задание может проверить, должно ли оно быть доставлено или нет, поэтому недопустимые задания будут проигнорированы и будет выполнен только последний. Это может сработать, но если пользователь сделает редактирование 1 тыс., Которое будет помещать 1k-1 недопустимые задания в очередь - это не хорошо. Я считаю, что существующая работа должна быть обновлена ​​или заменена новой. Насколько я знаю, поиск в очереди Redis для job_id медленный.

Что было бы правильным способом переназначения ActiveJobs в Rails (с resque/sidekiq)?

+0

Рассматривали ли вы переход на Que, который работает поверх PostgreSQL и интегрируется с AJ? По крайней мере, это быстро при массовом обновлении, я не уверен, что в нем возможно перепланирование. –

+0

Спасибо @ D-side. Я проверю, вписывается ли это в мою платформу. – xpepermint

+0

@ D-side Смешно, что я никогда не использовал жемчужину. Главной целью Que является надежность, и она выглядит так же быстро - идеально подходит для корпоративных услуг. – xpepermint

ответ

1

Нет, рабочие места не должны быть перенесены. Вы ответили на ваш вопрос:

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

Альтернатива повторно архитектора, как вы отправляете кампании: хранить дату поставки в базе данных и имеет проверку CRON каждую минуту для кампаний, которые нуждаются в доставке Теперь и создать работу Sidekiq прямо тогда.

+0

Спасибо, Майк ... – xpepermint

Смежные вопросы