使用 Java 邮件排队或不排队

The*_*igB 3 java queue jakarta-mail

该场景是通过 Web 请求(以及将来可能的其他邮件相关任务)向用户发送密码重置邮件。

我提出的排队论点:

  • 我认为应该尽快处理网络请求

  • 将发送操作与请求分离,更容易允许邮件系统的外部化(如果将来需要)

我认可的反对排队的论点:

  • 如果消息发送过程中出现问题,用户不会得到反馈

这次讨论还有哪些争论?对于那些支持排队的人来说,您将如何实现排队?预定的行动?无限出队任务(当然有间隔)?

谢谢!

Gri*_*ory 5

我建议您将实际的邮件发送与应用程序业务逻辑分离。异步执行此操作:使用队列或至少不同的线程来发送此类通知。

  1. 即使您使用靠近您的应用程序的自己的内部邮件服务器,发送电子邮件也可能是一项耗时的操作。SMTP 会话由多个请求/响应组成。
  2. 不要将发送邮件视为事务性操作。当目标 SMTP 服务器回复 250 OK 作为对 DATA 命令的响应时 - 它只对该邮件负责,不承担任何其他责任。如果链中的下一台服务器无法传送邮件,将来传送可能会失败(了解 DSN,又名退回邮件)。
  3. 最后但并非最不重要的一点是考虑故障模式。如果您的业务关键功能被辅助功能(电子邮件通知)减慢/阻止怎么办,我想这不太好。