Использование JMS или ThreadPool для отправки сообщений электронной почты - PullRequest
4 голосов
/ 03 марта 2010

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

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 03 марта 2010

Для обмена данными между приложениями 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.

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

Брюс

1 голос
/ 16 декабря 2010

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

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

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

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

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

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

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

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

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

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

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

0 голосов
/ 03 марта 2010

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

...