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

StackOverflow https://stackoverflow.com/questions/2370724

Вопрос

Я хочу знать:

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

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

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

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

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

Это было полезно?

Решение

Для взаимодействия между приложениями 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, в зависимости от того, что предлагает лучшую гарантию доставки).Кроме того, я бы серьезно подумал о том, чтобы сделать почтовый движок полностью отдельным приложением, в зависимости от того, насколько вы ожидаете роста трафика.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top