异步处理servletrequest以快速响应客户端并在tomcat后台处理繁琐的任务

时间:2011-12-28 04:52:50

标签: tomcat servlet-3.0

我有一个servlet,当客户端请求时,它会将多个邮件发送到不同的地址。

由于发送邮件需要很长时间,因此客户必须在收到回复之前等待。我想异步处理邮件发送,以便更快地将响应发送回客户端。

发送邮件也可以延迟几分钟,不需要实时。 我不想在数据库中保存任何信息,只想在应用程序中处理这个问题。我想到的解决方案如下:

当客户端请求这个servlet时,servlet会将邮件列表和内容作为属性添加到ServletContext中,并将响应发送回客户端 有一个辅助servlet在启动时被加载并产生一个在每(比如说)10分钟后执行的timertask线程,读取servletcontext属性,发送邮件并删除属性。

请建议这是否是一个好的解决方案。如果有的话,还建议一个更好的。

1 个答案:

答案 0 :(得分:0)

你的解决方案听起来很合理,除了我每次请求时都会启动邮件程序线程。没有必要单独的帮助" servlet就是出于这个原因。

或者甚至更好,拥有thread pool并为每个请求提交Callable

在线程/线程池选项上要格外小心:确保他们完成发送所有电子邮件(优雅)Tomcat关闭。只有在发送所有电子邮件后才能完成Tomcat关闭。