我放弃了 JBoss 社区论坛 - 从来没有在那里得到答案。所以在这里尝试。
我编写了一个小测试程序来帮助我诊断我在实际环境中看到的问题,但是我对 JBoss MQ 的无数可配置设置感到有点困惑,而且对它们都没有做出任何设置的事实更加困惑区别。
环境是JBoss 4.0.,4。
在实时环境中,从独立 Java 应用程序到远程机器上的 JBoss MQ 主题(由 MDB 提供服务)的 JMS 连接正在丢失。我没有任何关于它为什么丢失的信息(以及异常监听器启动)。
因此,我使用 Java 应用程序创建了一个测试环境,该应用程序将 TextMessages(包含递增的数字)发送到远程 JBoss 上的主题。
MDB 代码所做的只是在 TextMessage 中打印数字。
我注意到的第一件事是打印的线程称为“JMS SessionPool Worker-XX”,其中 XX 是 0 到 32。当我再次运行发送方应用程序时,XX 的值是 32 到 46。第三个run,值为 46 到 60。模式始终相同 - 在 JBoss 启动后第一次运行使用更多线程,后续运行使用 14 或 15 个线程。
那么,问题 1:对这种模式有解释吗?
在发送大约 15,000 条消息的运行期间,jms_messages 表在 JBoss 机器上建立。这意味着 JBoss MQ 跟不上,对吧?我假设内存必须高于 mysql-jdbc2-service.xml 中 MessageCache MBean 定义中指定的阈值。但是当我监控 JVM 内存时,它与为 HighMemoryMark 指定的 150MB 值相去甚远。我想我误解了有关 MessadeCache bean 定义的这条评论:“一旦 JVM 内存使用量达到高内存标记,缓存中的旧消息将开始存储在 DataDirectory 中”。我认为这意味着当堆使用量达到 150MB 时,收到的消息将开始写入 jms_messages,但显然我错了。
问题二:JBoss MQ 是在什么情况下开始写入 jms_messages 的?
最后一个问题 - 下面的容器配置设置是否对我看到的处理消息的线程数有任何影响?
<container-pool-conf>
<MaximumSize>500</MaximumSize>
<container-pool-conf>
谢谢你。