[英]Weblogic JMS Exception 055167 “cannot support more than one synchronous message-prefetching consumer.”
這是什么意思?
我繼承了一個集成測試失敗的復雜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]: weblogic.jms.client.WLProducerImpl@7b9a29
...
(My App) Publishing...
org.springframework.jms.connection.CachingConnectionFactory Found cached JMS MessageProducer for destination [MY-JMS-Module!DataTest2]: weblogic.jms.client.WLProducerImpl@7b9a29
...
(My App) Publishing...
org.springframework.jms.connection.CachingConnectionFactory Found cached JMS MessageProducer for destination [MY-JMS-Module!DataTest2]: weblogic.jms.client.WLProducerImpl@7b9a29
...
(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]: weblogic.jms.client.WLConsumerImpl@5e3eed51
(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源代碼來消除該異常。 任何幫助或建議,將不勝感激。 就像我說的那樣,代碼有點復雜,因此我不確定我能否提供比上面截斷的日志更多的信息,而不必將其變成新穎的東西。
TL; DR版本
嘗試在Weblogic管理控制台中為其中一個JMS連接工廠禁用消息預取。
長版
希望這會有所幫助,因為我對Weblogic的這一方面並不完全熟悉。
基本入門是Oracle文檔中的此流程圖。
您所獲得的日志消息顯示了查找連接工廠JNDI,創建連接,從該連接創建會話,查找目標JNDI,注冊消費者和生產者時發生的基本事件。
之后,當意識到有多個啟用了預取功能的使用者時,它似乎就失敗了。
此預取是Synchronous Consumer的屬性, 它可以預取成批消息以提高性能 。 請參閱標題為“使用預取模式創建同步消息管道”的章節。
在管理控制台中,嘗試將“同步使用方的預取模式”設置為“已禁用”
我遇到的其他文檔是錯誤代碼說明
BEA-055167錯誤:單個會話不能支持多個同步的消息預取使用者。
描述
單個會話不能支持多個同步消息預取使用者。
原因-另一個打開的同步消息預取使用者。
行動-關閉另一個同步消息預取使用者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.