【问题标题】:Weblogic JMS Exception 055167 "cannot support more than one synchronous message-prefetching consumer."Weblogic JMS 异常 055167“不能支持多个同步消息预取消费者。”
【发布时间】:2011-11-14 23:03:17
【问题描述】:

什么意思?

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

【问题讨论】:

    标签: java spring jms weblogic


    【解决方案1】:

    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 错误:单个会话不能支持多个 同步消息预取消费者。

    说明

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

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

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

    【讨论】:

    • 我确实找到了 BEA 错误描述。奇怪的是,我一直在查看此测试代码,但无论如何都没有找到一个以上相同目的地名称的消费者。当然,我假设异常没有说谎,所以代码中一定有另一个隐藏在某个地方。
    猜你喜欢
    • 2015-11-25
    • 2015-07-16
    • 2017-12-07
    • 2011-06-04
    • 2012-05-17
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多