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

时间:2014-02-07 10:32:58

标签: java email jms javamail

情景1:

  1. 在服务器中设置JMS队列
  2. 将消息发送到Producer的Java代码 创建一个JMS Producer,在调用时,应该接收电子邮件数据(subject,body,to,cc等)并将其发布到步骤1中的Queue设置
  3. 创建一个JMS使用者,它订阅在步骤1中创建的队列,其onMessage应该调用JavaMail API来发送电子邮件。
  4. 情景2:

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

    我知道如何使用以及JMS和Java Mail正在做什么.Thing是我们必须从场景2到场景1发送邮件的原因。最初我们做了场景2.现在我们正在使用场景1.从不同大应用程序的一部分正在发送邮件,所以我们使用JMS队列,会有邮件消费者从那里发送邮件。请帮助我理解。

3 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:5)

如果您的本地计算机附近没有可靠的MTA但需要确保您的邮件将被发送,则可以执行此操作。例如,如果网络中断,但您依靠Java Mail发送邮件而没有额外的逻辑,则根本不会发送您的邮件。

使用JMS,只要真正的MTA再次可用,您就可以重新安排邮件进行传输。

答案 2 :(得分:0)

此外:

  1. 与邮件提供商(SMTP和POP3)的对话是 异步并接近JMS / MDB api。那么我为什么要使用 与JMS不同的API?
  2. 您可以将邮件处理保留在一个事务中,同时保留一些数据库更改其他活动。我记得有太多Spring .. sic'项目,客户对原子操作的命令,包括db中的状态更改; - )
  3. 图片,您发送的邮件变得更加强制,您必须连接到X400服务。只需考虑轻微的代码更改(以及RA的更改),您就会发现符合正确的架构决策。