使用JMS或ThreadPool发送电子邮件

我想知道:

我有一个场景。 如果用户将产品添加到系统(我正在开发),则会有一个监听器向用户的客户端发送通知,通知用户添加的新产品。

我已经读过这个post了 (看到我之前从未使用过JMSThreadPool )我想知道是否应该使用JMS或ThreadPooling。

我正在使用Tomcat 5.5及更高版本和JBoss 5及更高版本(取决于公司的最后手段)来部署我的Web应用程序。

如果我使用JMS,我是否使用Apache ActiveMQ或JBoss Messaging ? 它们是否兼容在两个平台上运行(Tomcat和JBoss)?

提前致谢。

对于应用程序之间的通信,JMS是一个非常好的解决方案,尤其适用于事件和通知。 JMS允许使用所谓的异步消息发送和接收这样的通知,由此发送方和接收方彼此不了解并且不需要同时可用。

ActiveMQ是一个使用非常广泛的消息代理,它为Java,C / C ++,C#,Perl,PHP,Python,Ruby等提供客户端API。 这允许将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 in Action中 (参见第8章),而且还发布了一系列文章,名为ActiveMQ和Tomcat:Perfect Partners 。 希望人们会发现这有用。

我会选择一个持久的JMS(我只使用WLS JMS和Websphere MQ,所以不能比较AQ和JBoss,无论哪个提供更好的交付保证)。 此外,我会认真考虑将电子邮件引擎设置为完全独立的应用程序,具体取决于您对流量增长的预期。