2011-11-14 101 views
0

這是什麼意思?Weblogic JMS異常055167「不能支持多個同步消息預取消費者」。

我繼承了一個失敗的集成測試的複雜Java庫。這個庫使用了一個通用的發佈/訂閱範例,但是當涉及到這些Weblogic/JMS/Spring的東西時,我必須承認我很缺乏經驗。測試應用程序在一臺服務器上運行,並通過JNI從C++調用Java,並通過fork(通過JNI/Java發佈)啓動子發佈器進程。主應用程序通過Spring進行配置,並與安裝在另一臺服務器上的Weblogic JMS進行通信(Weblogic JMS服務器由我們項目中的另一個組控制)。我設法打開了spring jms調試,這有點幫助。所以我的日誌文件被我展示的事件順序是這樣的:

(My App) Publishing... 
org.springframework.jms.connection.CachingConnectionFactory Creating cached JMS MessageProducer for destination [MY-JMS-Module!DataTest2]: [email protected] 
... 
(My App) Publishing... 
org.springframework.jms.connection.CachingConnectionFactory Found cached JMS MessageProducer for destination [MY-JMS-Module!DataTest2]: [email protected] 
... 
(My App) Publishing... 
org.springframework.jms.connection.CachingConnectionFactory Found cached JMS MessageProducer for destination [MY-JMS-Module!DataTest2]: [email protected] 
... 
(My App) Subscribing to DataTest2 
org.springframework.jndi.JndiTemplate Looking up JNDI object with name [DataTest2] 
(My App) Launching publisher process... 
org.springframework.jms.support.destination.JndiDestinationResolver Located object with JNDI name [DataTest2] 
org.springframework.jms.connection.CachingConnectionFactory Creating cached JMS MessageConsumer for destination [MY-JMS-Module!DataTest2]: [email protected] 

(My App) Publishing.... 
org.springframework.jms.connection.CachingConnectionFactory Creating cached JMS MessageProducer for destination [MY-JMS-Module!DataTest2] 
... 
WARN 2011-11-14 22:01:00,421 org.springframework.jms.listener.DefaultMessageListenerContainer Setup of JMS message listener invoker failed for destination 'DataTest2' - trying to recover. Cause: [JMSClientExceptions:055167]Single session cannot support more than one synchronous message-prefetching consumer. 

java.lang.UnsupportedOperationException: [JMSClientExceptions:055167]Single session cannot support more than one synchronous message-prefetching consumer. 
    at weblogic.jms.client.JMSConsumer.receiveInternal(JMSConsumer.java:587) 
    at weblogic.jms.client.JMSConsumer.receive(JMSConsumer.java:526) 
    at weblogic.jms.client.WLConsumerImpl.receive(WLConsumerImpl.java:184) 
    at org.springframework.jms.connection.CachedMessageConsumer.receive(CachedMessageConsumer.java:74) 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:429) 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:310) 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947) 
    at java.lang.Thread.run(Thread.java:636) 

我當然希望我有訪問WebLogic JMS源代碼一下吧向下運行該異常。任何幫助或建議,將不勝感激。就像我說的那樣,代碼有點複雜,所以我不確定我能否提供比上面截斷的日誌更多的信息,而不會將它變成小說。

回答

0

TL; DR版本

嘗試停用消息預取的Weblogic管理控制檯內的JMS連接工廠中的一個。

龍版

希望這有助於因爲我不是完全熟悉的Weblogic的這一方面。

The Basic Primer本流程圖來自Oracle文檔。

只要查找Connection Factory JNDI,創建連接,從該連接創建會話,查找目標JNDI,註冊使用者和生產者,您所擁有的日誌消息就會顯示出基本信息。

它似乎失敗後,當它意識到有多個消費預啓用

此預取屬於Synchronous Consumer which enables prefetching batches of messages to improve performance的財產。 見二段題爲「使用預取模式創建同步消息流水線」

從管理控制檯,嘗試setting "Prefetch Mode for Synchronous Consumer" this to Disabled

其他文檔我碰到are the Error Code解釋來

BEA-055167 Error: Single session cannot support more than one synchronous message-prefetching consumer.

Description

Single session cannot support more than one synchronous message-prefetching consumer.

Cause - There is another opened synchronous message-prefetching consumer.

Action - Close the another synchronous message-prefetching consumer.

+0

我做找到BEA錯誤描述。奇怪的是,我一直在查看這個測試代碼,並且沒有發現多個消費者,無論如何都是相同的目的地名稱。當然,我假設異常不會說謊,所以必須在代碼中隱藏另一個代碼。 –