我正在构建一个Java EE应用程序,其中一个要求是为已注册的电子邮件发送消息(大约1000到2000)。对该应用程序的访问受到限制,并且在任何时候都会有少于2个用户登录。
发送电子邮件我正在使用JavaMail,@ Stateless bean和@Asynchronous方法。
我的问题是发送1000多封电子邮件需要很长时间,在我的开发服务器中每封电子邮件大约需要1.2秒。我该怎么做才能减少时间?我可以跨越多个无状态bean吗?或者在这种情况下创建大约10到15个线程,用户访问权限如此之低并不是太糟糕了?
答案 0 :(得分:3)
您的性能问题可能是由creating a new connection to send each message引起的,如JavaMail FAQ中所述。您的代码需要能够缓存并重用与邮件服务器的连接。以异步方式发送消息的更好方法可能是在JMS消息中放置构造消息所需的信息,然后使用(池)MDB处理信息,将其转换为邮件消息并发送,同时缓存并重用表示与服务器连接的Transport对象。
答案 1 :(得分:1)
您需要在容器内配置异步线程池大小,默认大小通常是15个并行线程。每个bean实例没有一个线程,但如果池填满,则会有一个队列,一次最多发送15个。