Я обычно отправляю транзакционные письма в ответ на определенные действия на моем сайте, некоторые из которых я откладываю на пару часов. Функция, которая фактически ставит очередь на электронную почту, - это задача задачи Celery, вызываемая с .delay()
, которая в конечном итоге вызывает вызов API Mandrill с использованием djrill
.Задержка отправки электронной почты с использованием Mandrill send_at или обратного отсчета сельдерея/eta
Я обнаружил, что Mandrill предлагает параметр send_at
при отправке сообщения электронной почты, на которое Mandrill задерживает отправку электронной почты до указанного времени. Сельдерей также предлагает eta
или countdown
параметров при вызове apply_async()
or delay()
по задаче, в которой рабочий из сельдерея будет ждать X времени до выполнения задачи —, которая здесь будет равна тому же.
Игнорирование стоимости, какой подход является архитектурно предпочтительным —, имеющий задержку сельдерей массового обслуживания электронной почты с помощью countdown
или отправки электронной почты немедленно Mandrill, но с параметром send_at
так Mandrill меня ждет? Какие факторы следует учитывать при принятии этого решения?
Вы по существу спрашиваете, должны ли вы продолжать рассылать электронную почту в своей собственной очереди или в Mandrill's? Это почти вопрос о Ops: удобнее ли вы разгружать обслуживание очереди почты на Mandrill или поддерживать его в сочетании с системой Celery, которую вы (предположительно) уже используете для других целей. Похоже, что стоимость переключения не будет высокой, поэтому, возможно, попробуйте в обоих направлениях и посмотрите, что вы предпочитаете. – medmunds
Еще одна вещь: если есть какая-то причина, вам нужен идентификатор сообщения Mandrill, назначенный в то время, когда вы _scheduling_ сообщение, тогда вам придется пойти с send_at Mandrill. – medmunds
Я сделал оба; и вы совершенно правы, что стоимость переключения низкая. Я больше задавался вопросом, чего мне не хватает, думая о том, когда созерцая это - и это звучит как потенциально не так много. – jdotjdot