Я ищу некоторые мнения здесь, я создаю веб-приложение, которое имеет довольно стандартную функциональность:Отправка сообщений электронной почты в веб-приложениях
- зарегистрировать учетную запись, заполнив форму и представить его ,
- Получить электронное письмо с ссылкой кодом подтверждения
- Нажмите на ссылку, чтобы подтвердить новую учетную запись и войти
При отправке сообщения электронной почты с вашего веб-приложения, часто (обычно) так, что там будет быть некоторым изменением уровня персистентности. Например:
- регистрация нового пользователя для учетной записи на сайте - новый пользователь создается в базе данных и электронная почта отправляется к ним с ссылкой для подтверждения
- Пользователь назначает ошибку или проблемы в кто-то другой - проблема обновляется и отправляются уведомления по электронной почте.
Как вы отправляете эти письма, это может иметь решающее значение для успеха вашего приложения. Как вы их отправляете, зависит от того, насколько важно, чтобы получатель получал электронное письмо.
Мы рассмотрим следующие четыре стратегии по отношению к случаю, когда почтовый сервер вниз, используя пример 1.
TRANSACTIONAL & SYNCHRONOUS Отправка сообщения электронной почты не удается, и пользователю будет показано сообщение об ошибке сообщение о том, что их учетная запись не может быть создана. Приложение будет выглядеть медленным и не отвечает, поскольку приложение ожидает таймаут соединения. Учетная запись не создается в базе данных, так как транзакция откатывается.
TRANSACTIONAL & ASYNCHRONOUS Транзактная определение здесь относится к отправке сообщения электронной почты в очереди JMS или сохранить его в таблице базы данных для другого фонового процесса, чтобы забрать и отправить.
Учетная запись пользователя создана в базе данных, электронное письмо отправляется в очередь JMS для последующей обработки. Сделка успешна и совершена. Пользователю показано сообщение о том, что их учетная запись была создана, и проверить их электронную почту для ссылки подтверждения. В этом случае возможно, что письмо не отправляется из-за какой-либо другой ошибки, однако пользователю сообщается, что письмо было отправлено им. Возможно, возникнет какая-то задержка в получении электронной почты, отправленной пользователю, если для поиска проблемы с электронной почтой необходимо вызвать поддержку приложения.
NON-TRANSACTIONAL & SYNCHRONOUS Пользователь создан в базе данных, но приложение получает ошибку таймаута, когда пытается отправить электронное письмо с помощью ссылки подтверждения. Появится сообщение об ошибке, в котором сообщается, что произошла ошибка. Приложение работает медленно и не отвечает на запросы, так как ожидает ожидания таймаута подключения
Когда почтовый сервер возвращается к жизни и пользователь снова пытается зарегистрироваться, им сообщается, что их учетная запись уже существует, но не подтверждена и ей предоставляется опция из-за того, что адрес электронной почты был отправлен повторно.
нетранзакционные & ASYNCHRONOUS Единственное различие между этим и транзакционной & асинхронным в том, что если есть ошибка отправка электронной почты в очередь JMS или сохранить его в базе данных, учетная запись пользователя, все равно создаются, но электронная почта никогда не отправляется, пока пользователь не попытается снова зарегистрироваться.
Что я хотел бы знать, что здесь делают другие люди? Можете ли вы порекомендовать любые другие решения, кроме 4, упомянутых выше? Каков разумный способ решения этой проблемы? Я не хочу переучивать систему, которая имеет дело с (надеюсь) редкой ситуацией, когда мой почтовый сервер падает!
Простейшая вещь, чтобы сделать это, чтобы закодировать его синхронно, но есть ли другие подводные камни для этого подхода? Наверное, мне интересно, есть ли лучшая практика, я не мог найти много там по поиску.
Хороший вопрос, но немного длинный ИМО. –
Возможно, это, я думаю, я просто стараюсь сделать это красивым и ясным :) – JMM