【问题标题】:Controlling JMS Server: too many MDBeans created (weblogic)控制 JMS 服务器:创建的 MDBean 过多(weblogic)
【发布时间】:2009-04-22 02:44:28
【问题描述】:
我有一个执行延迟操作的应用程序。用户生成 100 万条消息,这些消息存储在 JMS 队列中,然后 MDBean 使用这些消息并执行一些操作并将数据存储在数据库中。由于 JMS Queue 工作得太快,它会尝试创建 100 万个 MDBean 实例,而这些实例又会尝试创建 100 万个数据库连接。由于 JDBC 连接池无法处理 100 万个连接请求,因此其中一些超时也就不足为奇了。
控制创建的 MDBean 数量的最佳解决方案是什么? 100万条消息最好由一定数量的不超过JDBC池允许连接数的MDBean处理
【问题讨论】:
标签:
jdbc
jms
weblogic
jboss-mdb
【解决方案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>
如果未指定,则创建的实例数将仅受可用线程数的限制。无论如何,最好将最大线程数设置为等于或小于数据库连接池的大小。