[英]Strange phenomenon in Open MQ: unexpectedly messages start to get stuck in the JMS Queue for a while before delivering them to the MDB
應用程序簡要概述
JEE應用程序在GlassFish服務器中運行,請參閱下面的系統環境詳細信息,並將在GlassFish中以嵌入式模式配置的捆綁Open MQ用於內部JMS消息傳遞。 作為消息使用者,使用消息驅動Bean。 MDB池大小默認為32,請參見下面的JMS配置和MDB類詳細信息。
該應用程序可以分為兩個主要部分,其功能大致如下:
問題描述
從適配器到核心的消息傳遞通常僅需幾秒鍾即可順利進行。 但是,由於未知原因,有時會永久發生以下情況:適配器發送的消息在JMS隊列中停留了一分鍾,然后才傳遞到MDB。 使用Open MQ監視命令: imqcmd metrics dst -tq -n CacheQueueDest
或imqcmd query dst -tq -n CacheQueueDest
我們可以看到發送的消息在隊列中,並且僅在一分鍾之內就調用了MDB的onMessage方法。 當發生這種錯誤情況時,甚至一條消息都將卡在隊列中,因此該問題將獨立於系統負載而存在。
我已經為Open MQ設置了DEBUGHIGH日志級別,但是在日志中什么都沒有找到。 我已將Open MQ配置為本地(在自己的進程中運行,而不是在GlassFish進程中運行),並設置了數據包級別的日志記錄,但同樣也沒有發現任何問題。
擺脫這種錯誤狀態的唯一方法是重新啟動GlassFish服務器。
任何解決此問題的想法,我將不勝感激。
系統環境:
SunOS 5.10 Generic_150401-05 i86pc i386 i86pc
GlassFish Server開源版3.1.2.2(內部版本5)
打開Message Queue 4.5.2
甲骨文
版本:4.5.2補丁1(版本3-d)
編譯:2012年6月7日星期四10:46:15
Java版本“ 1.7.0_25”
Java(TM)SE運行時環境(內部版本1.7.0_25-b34)
Java HotSpot(TM)64位服務器VM(內部版本23.25-b03,混合模式)
來自domain.xml的JMS配置:
<resources>
<admin-object-resource
res-adapter="jmsra"
res-type="javax.jms.Queue"
jndi-name="jms/cacheQueue">
<property name="Name" value="CacheQueueDest"></property>
</admin-object-resource>
<connector-connection-pool
name="jms/cacheConnFactory"
resource-adapter-name="jmsra"
is-connection-validation-required="true"
connection-definition-name="javax.jms.QueueConnectionFactory"
max-wait-time-in-millis="6000"
fail-all-connections="true"
transaction-support="NoTransaction"/>
</resources>
<configs>
<config name="server-config">
<mdb-container/>
<jms-service default-jms-host="default_JMS_host">
<jms-host port="59900" host="localhost" name="default_JMS_host"></jms-host>
</jms-service>
</config>
</configs>
MDB類別:
...
import javax.jms.Message;
import javax.jms.MessageListener;
...
@MessageDriven(mappedName = "jms/cacheQueue", messageListenerInterface = javax.jms.MessageListener.class)
public class CacheChange implements MessageListener {
...
@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
@Override
public void onMessage(final Message message) {
...
}
...
}
我有時在嵌入模式下發現了此問題,此問題解決后,我們切換到本地獨立模式(啟動OpenMQ單獨的JVM)。 你可以試試。
湯姆斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.