2016-10-04 76 views
4

我配置的MDB用於監聽外部ActiveMQ代理上的隊列。它工作正常,但MDB從隊列中接收消息,並在延遲2分鐘後纔開始處理。我沒有配置任何超時,但它看起來好像有一種屬性會延遲處理。有人建議我如何調整這個延遲並切換到立即處理?Glassfish + ActiveMQ MDB處理120秒延遲信息

+0

我也遇到相同問題。需要120秒才能完成發送到隊列。 我只在Glassfish 4.1.1(Centos 6)上看到這個,但Glassfish 4.1(Windows 10)很好。 您是否找到解決方案? – kosgeinsky

+0

如果您提供了activemq.xml,它可能會更有幫助。 我有類似的問題,但環境與您的環境略有不同(我們使用的是Glassfish的JBoss EAP 7 instad)。我們經歷的延誤時間有所不同。我們通過指定「pendingMessageLimitStrategy」來解決它。看看http://activemq.apache.org/slow-consumer-handling.html,也許它會讓你更接近。 –

+0

顯示您的配置,以及調用activemq的代碼可能會幫助所有人 – Adonis

回答

2

這是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