我正在构建一个Java EE应用程序,它的要求之一是发送已注册电子邮件的消息(大约1000到2000)。对该应用程序的访问受到限制,并且在任何时候都将少于2个用户登录。
为了发送电子邮件,我使用JavaMail,@ Stateless bean和@Asynchronous方法。
我的问题是,发送1000多封电子邮件花费的时间太长,开发服务器中的每封电子邮件大约需要1.2秒的时间。我该如何减少时间?我可以跨越多个无状态 bean 吗?还是在那种情况下创建大约10到15个线程,如此低的用户访问权限还算不错吗?
最佳答案
如JavaMail FAQ中所述,您的性能问题可能是由于creating a new connection to send each message引起的。您的代码需要能够缓存和重用与邮件服务器的连接。异步发送消息的更好的方法可能是将构造消息所需的信息放入JMS消息中,然后使用MDB(的池)处理信息,将其转换为邮件消息,然后在缓存时发送并重用表示与服务器的连接的传输对象。
关于multithreading - 通过单个EJB @Asynchronous方法产生多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039950/