我有一个servlet,当客户端请求时,它会将多个邮件发送到不同的地址。
由于发送邮件需要很长时间,因此客户必须在收到回复之前等待。我想异步处理邮件发送,以便更快地将响应发送回客户端。
发送邮件也可以延迟几分钟,不需要实时。 我不想在数据库中保存任何信息,只想在应用程序中处理这个问题。我想到的解决方案如下:
当客户端请求这个servlet时,servlet会将邮件列表和内容作为属性添加到ServletContext中,并将响应发送回客户端 有一个辅助servlet在启动时被加载并产生一个在每(比如说)10分钟后执行的timertask线程,读取servletcontext属性,发送邮件并删除属性。
请建议这是否是一个好的解决方案。如果有的话,还建议一个更好的。
答案 0 :(得分:0)
你的解决方案听起来很合理,除了我每次请求时都会启动邮件程序线程。没有必要单独的帮助" servlet就是出于这个原因。
或者甚至更好,拥有thread pool并为每个请求提交Callable。
在线程/线程池选项上要格外小心:确保他们完成发送所有电子邮件(优雅)Tomcat关闭。只有在发送所有电子邮件后才能完成Tomcat关闭。