代码之家  ›  专栏  ›  技术社区  ›  Buhake Sindi Tesnep

使用JMS或ThreadPool发送电子邮件消息

  •  4
  • Buhake Sindi Tesnep  · 技术社区  · 15 年前

    我想知道:

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

    我读过这个 thread 而且(因为我从未用过 JMS 也不 ThreadPool 之前)我想知道我应该使用JMS还是线程工具。

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

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

    事先谢谢。

    4 回复  |  直到 14 年前
        1
  •  3
  •   bsnyder    15 年前

    对于应用程序之间的通信,JMS是一个非常好的解决方案,特别是对于事件和通知。JMS允许使用所谓的异步消息传递来发送和接收此类通知,这样发送方和接收方就不了解彼此,也不要求同时可用。

    ActudiMQ是一个非常广泛使用的消息代理,它为Java、C/C++、Cype、Perl、PHP、Python、露比等提供客户端API。这允许使用JMS和Java和其他语言编写的应用程序。

    我已经为处理事件和通知的各种业务情况实现了很多次JMS消息传递。大多数时候,我都推荐和/或使用 Spring JMS 不管使用什么消息代理。SpringJMS非常容易使用,非常健壮,并且具有高度的可扩展性。SpringJMS消除了创建自己的消息生产者和消息消费者的复杂性,这可以节省您大量的时间。

    要了解使用SpringJMS发送消息有多容易,请查看我最近写的一篇题为 Using the Spring JmsTemplate to Send JMS Messages . 我还在写一篇关于使用SpringJMS接收消息的博客文章。

    如果你还有什么问题,请告诉我。

    布鲁斯

        2
  •  1
  •   ewernli    15 年前

    我曾经有过类似的要求,我们使用JMS。然后主要的问题是如何处理错误,因为SMTP确实不是事务性的:

    1. 如果丢失了一些电子邮件可以吗?
    2. 如果一些电子邮件发送两次可以吗?

    我们决定最好发送两次信息,以下是我们的设计:

    1. 我们依赖于容器管理的事务,如果由于某种原因无法发送电子邮件,我们决定回滚JMS事务;消息稍后将由JMS重新传递,并完成了发送消息的新尝试。

    2. 如果发送电子邮件后JMS消息传递事务失败(例如,由于JMS的问题),则事务将自动回滚,稍后再重新传递消息。在这种情况下,电子邮件发送了两次,因为stmp不是事务性的。

    3. 即使可以发送电子邮件(从代码的角度来看),SMTP服务器以后仍然会有问题。在这种情况下,JMS已经交付和使用,因此我们无法知道处理了哪些电子邮件以及如何手动重新发送它们。

    但我们已经在使用JMS了。鉴于JMS是事务性的,所以我不会仅仅介绍JMS,但无论如何,SMTP并不是。

    我会选择更轻的邮件——可能是用线程工具——并将状态存储在数据库中,以了解需要发送或已经发送的电子邮件。如果有什么问题,您可以查看数据库并做出特别的决定。

        3
  •  1
  •   bsnyder    14 年前

    我知道这个回复对于这个结论来说已经很晚了,但是我希望它对于那些寻求有关集成ActiveMQ和Tomcat的信息的人仍然有价值。

    我有很多人向我寻求帮助,解决他们集成了ActiveMQ和Tomcat的问题,所以我决定写一些相关的文章。这个主题不仅包括在 ActiveMQ in Action (见第8章),但我也发表了一系列文章,题为 ActiveMQ and Tomcat: Perfect Partners . 希望人们会发现这有帮助。

        4
  •  0
  •   saugata    15 年前

    我将使用持久的JMS(我只使用了WLS JMS和WebSphere MQ,因此无法比较AQ和JBoss,无论哪一个提供了更好的交付保证)。另外,我会认真考虑让电子邮件引擎成为一个完全独立的应用程序,这取决于您对流量增长的预期。