我有一个执行延迟操作的应用程序。用户生成存储在JMS队列中的100万条消息,然后MDBeans正在使用这些消息并执行某些操作并将数据存储在数据库中。由于JMS Queue工作得太快,它会尝试创建100万个MDBean实例,这些实例又会尝试创建100万个数据库连接。毫不奇怪,由于JDBC连接池无法提供100万个连接请求,因此其中一些超时。
控制创建的MDBeans数量的最佳解决方案是什么?最好是一定数量的MDBeans处理100万条消息,这些消息不超过JDBC池中允许的连接数
答案 0 :(得分:1)
您可以在weblogic-ejb-jar.xml中使用bean的描述符中的max-beans-in-free-pool元素来限制MDB的实例数。
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>100</max-beans-in-free-pool>
<initial-beans-in-free-pool>50</initial-beans-in-free-pool>
</pool>
...
</message-driven-descriptor>
如果未指定,则创建的实例数将仅受可用线程数限制。无论如何,最好将最大线程数设置为等于或小于数据库连接池的大小。