我放弃了JBoss社区论坛--从来没有一个问题在那里得到回答。所以就在这里试试吧。
我已经编写了一个小测试程序来帮助我诊断我在实际环境中看到的问题,但是我对JBoss MQ的大量可配置设置感到有点困惑,更令我困惑的是,它们都没有起到任何作用。
运行环境为JBoss 4.0。
在实际环境中,从独立Java应用程序到远程机器上的JBoss MQ主题(由MDB提供服务)的JMS连接正在丢失。我没有任何关于它丢失的原因的信息(以及异常监听程序在起作用)。
因此,我使用一个Java应用程序创建了一个测试环境,它向远程JBoss上的一个主题发送TextMessages (包含一个递增的数字)。
MDB代码所做的全部工作就是打印TextMessage中的数字。
我注意到的第一件事是打印的线程名为"JMS SessionPool Worker- XX ",其中XX是0到32。当我再次运行发送器应用程序时,XX的值为32到46。第三次运行时,值是46到60。模式始终是相同的-在JBoss启动后的第一次运行中使用更多的线程,在后续运行中使用14或15个线程。
那么,问题1:对这种模式有什么解释吗?
在发送大约15,000条消息的运行过程中,jms_messages表在JBoss机器上构建。这意味着JBoss MQ跟不上,对吧?我假设内存必须超过mysql-jdbc2- MBean中的MessageCache服务定义中指定的阈值。但是,当我监视JVM内存时,它与为HighMemoryMark指定的150MB值相差甚远。我想我误解了关于JVM定义的评论:“一旦MessadeCache内存使用率达到高内存标记,缓存中的旧消息将开始存储在DataDirectory中”。我认为这意味着当堆使用率达到150MB时,收到的消息将开始写入jms_messages,但显然我错了。
问题2:在什么情况下JBoss MQ开始向jms_messages写入数据?
最后一个问题--下面的容器配置设置对我看到的处理消息的线程数有影响吗?
<container-pool-conf>
<MaximumSize>500</MaximumSize>
<container-pool-conf>谢谢。
发布于 2013-03-18 03:06:03
我已经很久没有需要使用JBoss MQ了……所以这并不是你(感兴趣的)问题的真正答案,但无论如何可能会有所帮助。
如果您使用内置的HSQL数据库作为JBoss MQ的消息存储,则无法处理短时间内发送的15k消息之类的负载。您需要切换到真正的数据库,除非您想放弃持久消息存储(据我所知,您可以配置),这对性能有好处,但有些消息可能会永远丢失。
JMS并不是迄今为止创建的最好的JBoss提供程序。事实上,它几乎不是生产就绪的解决方案,使用它是一种真正的痛苦(没有好的文档,奇怪的配置,你现在正在经历的事情)。这就是为什么JBoss用户在JBoss 5.X中切换到JBoss消息传递(事实上,在商业JBoss 4.X EAP而不是GA -他们总是使用JBoss消息传递)。
对,不是最好的选择是switch to HornetQ -它有很好的文档,健壮,可以处理非常大的负载。
https://stackoverflow.com/questions/15450933
复制相似问题