我是 j2ee 世界的新手,我的 MDB 存在配置问题。我们将 Glassfish 3.1.2 和 ActiveMQ 5.6.0 用于我们的 JMS 队列(不是主题,只是队列)。我们在 Glassfish 中部署了一个企业应用程序,其中包含连接到 3 个不同 JMS 队列的 3 个 MDB。
每个队列都有以下配置(来自 Glassfish 管理控制台):
- 初始池大小:20
- 最大池大小:64
- 调整大小:1
我们还在 METADATA 项目文件夹中的 sun-ejb.xml 文件中添加了相同的配置。
为了检查它的行为,每个 MDB 都有:
- 静态 int 变量(计数器)
- 私有(非静态)int 变量(internalCounter)
- 一个构造函数,我们在其中递增静态计数器,将其值分配给 internalCounter 并将值显示到日志中。通过这种方式,我们为每个 MDB 实例提供一个“自定义”唯一 ID
- 一个“onMessage”方法,只有一个 System.out.println(internalCounter) 和一个 Thread.sleep(2000) (它只是用于性能测试)
当我们用大量消息(每秒 20-30 条消息)测试系统时,我们注意到我们的 MDB 无法以我们将消息放入队列的相同速度处理消息,因此从 ActiveMQ Web 界面我们查看每个队列的“排队消息”增量。
检查日志,我发现:
- Glassfish 为每个队列创建 30 个 MDB 实例
- Glassfish 对每个队列始终使用相同的 10 个实例(实例 #21 到 #30),而我的期望是 Glassfish 为每个队列使用全部 30 个 MDB
我使用以下配置(通过 admin-console 和 xml 项目文件)再次运行了这个测试:
- 初始池大小:0
- 最大池大小:64
- 调整大小:1
在日志中我发现 Glassfish 只创建和使用了 10 个 MDB 实例(#1 到 #10)
拜托,你能帮我吗?
在此先感谢并原谅我的英语不好
阿莱西奥