Glassfish + ActiveMQ MDB处理120秒延迟信息
问题描述:
我配置的MDB用于监听外部ActiveMQ代理上的队列。它工作正常,但MDB从队列中接收消息,并在延迟2分钟后才开始处理。我没有配置任何超时,但它看起来好像有一种属性会延迟处理。有人建议我如何调整这个延迟并切换到立即处理?Glassfish + ActiveMQ MDB处理120秒延迟信息
答
这是Glassfish很久以前的一个旧bug。
这里记录了一个错误,但现在这个网站也关闭了。 http://java.net/jira/browse/GLASSFISH-1429
添加System.exit(0)(在finally块中),它关闭所有线程。
try{
code ...
}finally{
System.exit(0) ;
}
您还可以启用调试:
1)使jstack,看看有多少线程从MDB线程池是 使用。
2)尽量使工作管理器和线程池的监测统计: http://download.oracle.com/docs/cd/E19879-01/820-4335/6nfqc3qp8/index.html
+0
我试图使用JVM报告生成线程转储,但无法找出任何可疑的东西,但它确实似乎是glassfish错误,因为在还原到其他glassfish版本4.1(4.1.1除外),这个问题不存在。我认为这回答了。 Thanks Khan – kosgeinsky
我也遇到相同问题。需要120秒才能完成发送到队列。 我只在Glassfish 4.1.1(Centos 6)上看到这个,但Glassfish 4.1(Windows 10)很好。 您是否找到解决方案? – kosgeinsky
如果您提供了activemq.xml,它可能会更有帮助。 我有类似的问题,但环境与您的环境略有不同(我们使用的是Glassfish的JBoss EAP 7 instad)。我们经历的延误时间有所不同。我们通过指定“pendingMessageLimitStrategy”来解决它。看看http://activemq.apache.org/slow-consumer-handling.html,也许它会让你更接近。 –
显示您的配置,以及调用activemq的代码可能会帮助所有人 – Adonis