Weblogic JMS异常055167“不能支持多个同步消息预取消费者。”

时间:2011-11-14 23:03:18

标签: java spring jms weblogic

这是什么意思?

我继承了一个带有失败集成测试的复杂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源代码来运行该异常。任何帮助或建议将不胜感激。就像我说的那样,代码有点复杂,所以我不确定我能提供比上面截断的截断日志更多的信息,而不是把它变成一本小说。

1 个答案:

答案 0 :(得分:0)

TL; DR版

尝试在Weblogic管理控制台中禁用其中一个JMS连接工厂的消息预取。

长版

希望这有帮助,因为我不完全熟悉Weblogic的这个方面。

The Basic Primer是来自Oracle文档的流程图。

您所显示的日志消息显示了查找连接工厂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错误:单个会话不能支持多个   同步消息预取消费者。

     

说明

     

单个会话不能支持多个同步   消息预取消费者。

     

原因 - 还有另一个打开了   同步消息预取消费者。

     

操作 - 关闭另一个同步消息预取消费者。