Использование JMS или ThreadPool для отправки сообщений электронной почты

Я хотел бы знать:

У меня есть сценарий. Если пользователь добавляет продукт в систему (я разрабатываю), есть слушатель, который отправляет уведомление клиентской базе пользователя, уведомляющее о новом продукте, добавленном пользователем.

Я прочитал эту ветку и (видя, я никогда не использовал JMS ни ThreadPool раньше) мне было интересно, стоит ли мне использовать JMS или ThreadPooling.

Я использую Tomcat 5.5 и выше и JBoss 5 и выше (в зависимости от последней инстанции компании) для развертывания моего веб-приложения.

Если я использую JMS, я использую Apache ActiveMQ или JBoss Messaging? Совместимы ли они для работы на обеих платформах (Tomcat и JBoss)?

Заранее спасибо.

4 ответа

Решение

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

ActiveMQ - очень широко используемый брокер сообщений, который предоставляет клиентские API для Java, C/C++, C#, Perl, PHP, Python, Ruby и других. Это позволяет использовать JMS с приложениями, написанными на Java и других языках.

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

Чтобы узнать, как легко отправлять сообщения с помощью Spring JMS, ознакомьтесь с недавно написанным мною блогом под названием " Использование Spring JmsTemplate для отправки сообщений JMS". Я также работаю над сообщением в блоге о получении сообщений с помощью Spring JMS.

Если у вас есть дополнительные вопросы, дайте мне знать.

Брюс

У меня было подобное требование однажды, и мы использовали JMS. Тогда главной проблемой было то, как бороться с ошибками, потому что SMTP действительно не транзакционный:

  1. это нормально, если некоторые письма будут потеряны?
  2. это нормально, если электронное письмо отправлено дважды?

Мы решили, что лучше отправить сообщение дважды, и вот более-менее дизайн, который у нас был:

  1. Мы полагались на транзакцию, управляемую контейнером, и если по какой-то причине электронное письмо не может быть отправлено, мы решили откатить транзакцию JMS; сообщение будет доставлено позднее JMS, и была предпринята новая попытка отправить сообщение.

  2. Если транзакция доставки сообщения JMS не удалась после того, как электронное письмо было отправлено (например, из-за проблемы с JMS), транзакция автоматически откатится и сообщение будет доставлено позже. В этом случае электронное письмо было отправлено дважды, поскольку STMP не является транзакционным.

  3. Даже если электронное письмо может быть отправлено (с точки зрения кода), SMTP-сервер может все еще иметь проблемы позже. В этом случае JMS были доставлены и использованы, поэтому у нас не было возможности узнать, какое электронное письмо было обработано и как отправить его повторно вручную.

Но мы уже использовали JMS. Я бы не стал вводить JMS только для этого, поскольку основным аргументом является то, что JMS является транзакционным, а SMTP - нет.

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

Я знаю, что этот ответ очень поздно для этой дискуссии, но я надеюсь, что он все еще будет полезен для людей, ищущих информацию об интеграции ActiveMQ и Tomcat.

Многие люди обращались ко мне за помощью по вопросам, связанным с интеграцией ActiveMQ и Tomcat, поэтому я решил написать об этом несколько статей. Эта тема не только освещена в ActiveMQ в действии (см. Главу 8), но я также опубликовал серию статей под названием ActiveMQ и Tomcat: Perfect Partners. Надеюсь, люди найдут это полезным.

Я бы выбрал постоянный JMS (я использовал только WLS JMS и Websphere MQ, поэтому не могу сравнить AQ с JBoss, в зависимости от того, что лучше для доставки). Кроме того, я бы серьезно подумал о том, чтобы сделать почтовый движок совершенно отдельным приложением, в зависимости от того, насколько вы ожидаете, что трафик будет расти.

Другие вопросы по тегам