multithreading - 通过单个EJB @Asynchronous方法产生多个线程

标签 multithreading jakarta-ee ejb jakarta-mail

我正在构建一个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/

相关文章:

c# - Monitor.TryEnter检查对象是否已锁定?

c# - 为什么 EventWaitHandle.WaitAny 方法有 64 个句柄限制?

java - 创建 Java/Java EE 例程来发送邮件

jakarta-ee - 与 Java EE HttpSession 相比,Play 2.0 中的 cookie + 缓存机制的主要优势(关于可扩展性)是什么?

Java JFrame 在运行线程时卡住

javascript - 访问异步函数之外的变量时的JS安全性

java - 从包含 WAR 文件的 EAR 文件中读取属性

java - @NamedQueries,在实体中创建一个新查询

java - JAX-WS(TomEE) Web 服务构造函数仅运行一次

java - 计划任务执行两次