2013-06-19 3 views
0

Я только что прочитал об этом excellent question о преимуществах отправки электронной почты асинхронно и синхронно.Как отправить электронную почту асинхронно, но как можно скорее?

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

В моей текущей реализации используется таблица базы данных для хранения очереди электронной почты. Этот подход имеет ряд преимуществ:

  • Это очень быстро: сохранение записи в таблицу не требует времени, в отличие от размещения вызова API (электронные письма отправляются через SAS Amazon).
  • Это транзакционный: если что-то пойдет не так, транзакция отменяется, и моя электронная почта никогда не будет отправлена ​​для учетной записи, которая не была бы привязана к базе данных.

Затем я выполнил задание, которое выполняется постоянно и будет проверяться на регулярной основе (в настоящее время 30 секунд), если есть какие-то письма для отправки и их обработки.

Я достаточно доволен этим решением, кроме того, что это не совсем мгновенно. В течение нескольких секунд люди часто ожидают получить почту (даже если это SMS).

Я, очевидно, мог сделать работу паузой не более одной секунды между двумя запусками, но я не хочу ненужно тратить ресурсы сервера с частыми транзакциями. Кроме того, поскольку мои письма отправляются через вызов API, я бы выиграл от параллельной обработки, которую моя текущая реализация не делает (она последовательно их обрабатывает).

Есть ли некоторые распространенные решения для асинхронной обработки электронной почты, но начать обработку, как только письмо отправлено в очередь?

ответ

0

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

+0

Они находятся на разных машинах, хотя для этого существует какая-то стандартизованная система уведомлений? – Benjamin

+0

Пасс. Это очень зависит от того, что вы используете на двух машинах. В принципе, должно быть возможно передавать сообщения между машинами. Детали могут быть несколько сложными, хотя, в зависимости. – rossum

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