java - 使用 Java 邮件排队或不排队

标签 java queue jakarta-mail

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

我带到表中进行排队的参数:

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

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

我认为反对排队的论据:

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

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

谢谢!

最佳答案

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

  1. 发送电子邮件可能是一项耗时的操作, 即使您使用靠近您的应用程序的自己的内部邮件服务器。 SMTP session 由多个请求/响应组成。
  2. 不要将发送邮件视为交易行为。 当目标 SMTP 服务器回复 250 OK 作为对 DATA 命令的响应时 - 它只对这封邮件负责。 如果链中的下一个服务器无法投递邮件(阅读有关 DSN,又名弹跳的信息),投递可能会在未来失败。
  3. 最后但同样重要的是考虑故障模式。 如果您的业务关键功能被辅助功能(电子邮件通知)减慢/阻止怎么办,我想这不太好。

关于java - 使用 Java 邮件排队或不排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177705/

相关文章:

c - C 中的 BST 链表 : Breadth First Search

java - 从多个电子邮件帐户发送 JavaMail

java - 不能用Java发送邮件

java - Android,不确定我应该存储到内部存储还是外部存储

java - 为什么这些 BST 方法都不起作用?

java - Grails - 在 CLASSPATH 中找不到类 "org.grails.tomcat.TomcatLoader"

java - 无效的 double : "" when calling EditText,,但在相同方法中未从其他人处获得

c - 在 C 中实现队列时遇到问题

Python:Multiprocessing Queue.put 不适用于半大数据

jakarta-mail - 文件名中的 JavaMail 和非 ASCII 字符