为什么要使用JMS通过Java Mail发送邮件

3

情景一:

  1. 在您的服务器上设置一个JMS队列。
  2. 编写Java代码以向生产者发送消息。创建一个JMS生产者,当调用它时,应该接收电子邮件数据(主题、正文、收件人、抄送等)并将其发布到第1步设置的队列中。
  3. 创建一个JMS消费者,订阅在步骤1中创建的队列,其onMessage应该调用JavaMail API来发送电子邮件。

情景二:

  • 直接调用JavaMail API发送电子邮件。

我知道如何使用JMS和Java Mail,但为什么我们要从情景2转换到情景1来发送邮件呢?最初我们使用了情景2,现在我们使用情景1。因为在大型应用程序的不同部分发送邮件,所以我们使用JMS队列,有来自队列消费者的邮件发送。请帮助我理解。


1
不,你在问为什么这个系统是由你所在的一群人建造的,它的工作方式是怎样的。所以去问他们,他们比网络上的任何一群陌生人更清楚为什么会这样。 - Gimby
3个回答

12

在大型应用程序中使用此机制有两个原因:

1) 您不希望客户等待邮件发送。

2) 如果由于任何原因失去与您的邮件服务器的连接,您不希望丢失邮件。


5
如果您没有可靠的 MTA(邮件传输代理)附近的本地机器,但需要确保您的邮件将被发送,则可以这样做。例如,如果出现网络中断但您仍然依赖于 Java Mail 来发送电子邮件而没有其他逻辑,那么您的邮件将根本无法发送。
使用 JMS,您可以在真正的 MTA 再次可用时重新安排邮件传输。

0

另外:

  1. 与邮件提供商(SMTP和POP3)的交互是异步的,并且接近于JMS/MDB API。那么我为什么要使用不同于JMS的API呢?
  2. 您可以将邮件处理与其他活动(例如数据库更改)放在一个事务中。我记得有太多“Spring..sic”项目,客户要求进行原子操作,其中包括对数据库进行状态更改 ;-)
  3. 想象一下,您发送的消息变得更加强制性,并且您必须连接到X400服务。只需考虑一下代码略微更改(以及RA的更改),您就会发现做出了正确的架构决策。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接