Tomcat 6 потокобезопасная очередь электронной почты (javax.mail. *) - PullRequest
1 голос
/ 27 марта 2010

Привет, у меня вопрос дизайна / архитектуры. Я хотел бы отправлять электронные письма с одной из моих страниц JSP. У меня есть одна конкретная проблема, которая была немного проблемой. есть случай, когда одной из страниц нужно будет отправить около 50 писем в одно и то же время. Я хотел бы, чтобы сообщения отправлялись в очередь, где фоновая нить фактически будет отправлять электронную почту. Как правильно решить эту проблему? Если вы знаете учебник, пример кода или конфигурация Tomcat необходимы, пожалуйста, дайте мне знать.

Спасибо

1 Ответ

1 голос
/ 27 марта 2010

Ваше решение довольно разумное: добавьте сообщения во внутреннюю очередь, а затем разрешите фоновую задачу.

Вот несколько полезных советов:

  • Если вы не хотите распространяться (в этом случае вам следует взглянуть на JMS), используйте реализацию BlockingQueue для своей очереди. В фоновом потоке просто выполните бесконечный цикл, пока take() -ing-сообщения из очереди. Эти классы позаботятся о потенциальных проблемах параллелизма для вас.
  • Используйте ServletContextListener для настройки фонового потока при запуске и остановке веб-приложения.

Одна из возможных проблем с использованием необработанного BlockingQueue заключается в том, что при остановке веб-приложения все сообщения в очереди теряются. Если это серьезная проблема, то, вероятно, будет проще всего использовать базу данных для очереди и использовать notify() для пробуждения фонового потока, который затем обрабатывает все запросы из базы данных.

...