场景是通过 Web 请求向用户发送密码重置邮件(以及将来可能的其他邮件相关任务)。
我带到表中进行排队的参数:
我认为应该尽快处理网络请求
将发送操作与请求分离,更容易允许邮件系统的外部化(如果将来需要)
我认为反对排队的论据:
- 如果消息发送过程中出现问题,用户不会得到反馈
这次讨论还有哪些争论点?对于那些赞成排队的人,您将如何实现队列?预定的行动?无限出队任务(当然有间隔)?
谢谢!
最佳答案
我建议您将实际的邮件发送与您的应用业务逻辑分离。 异步执行此操作:使用队列或至少使用不同的线程来发送此类通知。
- 发送电子邮件可能是一项耗时的操作, 即使您使用靠近您的应用程序的自己的内部邮件服务器。 SMTP session 由多个请求/响应组成。
- 不要将发送邮件视为交易行为。 当目标 SMTP 服务器回复 250 OK 作为对 DATA 命令的响应时 - 它只对这封邮件负责。 如果链中的下一个服务器无法投递邮件(阅读有关 DSN,又名弹跳的信息),投递可能会在未来失败。
- 最后但同样重要的是考虑故障模式。 如果您的业务关键功能被辅助功能(电子邮件通知)减慢/阻止怎么办,我想这不太好。
关于java - 使用 Java 邮件排队或不排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177705/