1

我是 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 都有:

  1. 静态 int 变量(计数器)
  2. 私有(非静态)int 变量(internalCounter)
  3. 一个构造函数,我们在其中递增静态计数器,将其值分配给 internalCounter 并将值显示到日志中。通过这种方式,我们为每个 MDB 实例提供一个“自定义”唯一 ID
  4. 一个“onMessage”方法,只有一个 System.out.println(internalCounter) 和一个 Thread.sleep(2000) (它只是用于性能测试)

当我们用大量消息(每秒 20-30 条消息)测试系统时,我们注意到我们的 MDB 无法以我们将消息放入队列的相同速度处理消息,因此从 ActiveMQ Web 界面我们查看每个队列的“排队消息”增量。

检查日志,我发现:

  1. Glassfish 为每个队列创建 30 个 MDB 实例
  2. Glassfish 对每个队列始终使用相同的 10 个实例(实例 #21 到 #30),而我的期望是 Glassfish 为每个队列使用全部 30 个 MDB

我使用以下配置(通过 admin-console 和 xml 项目文件)再次运行了这个测试:

  • 初始池大小:0
  • 最大池大小:64
  • 调整大小:1

在日志中我发现 Glassfish 只创建和使用了 10 个 MDB 实例(#1 到 #10)

拜托,你能帮我吗?

在此先感谢并原谅我的英语不好

阿莱西奥

4

0 回答 0