Weblogic JMS Exception 055167 «не может поддерживать более одного синхронного потребителя предварительной выборки сообщений». - PullRequest
0 голосов
/ 15 ноября 2011

Что это значит?

Я унаследовал сложную библиотеку Java с ошибочным тестом интеграции.Библиотека использует общую парадигму публикации / подписки, но я должен признаться, что я довольно неопытен, когда дело доходит до любого из этих материалов Weblogic / JMS / Spring.Тестовое приложение запускается на одном сервере и вызывает Java из C ++ через JNI, а также запускает дочерний процесс издателя через fork (который публикуется через JNI / Java).Основное приложение настраивается через Spring и обменивается данными с Weblogic JMS, установленной на другом сервере (сервер Weblogic JMS контролируется другой группой в нашем проекте).Мне удалось включить весеннюю отладку 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 голосов
/ 15 ноября 2011

TL; версия DR

Попробуйте отключить предварительную выборку сообщений для одной из фабрик соединений JMS в Weblogic Admin Console.

Длинная версия

Надеюсь, это поможет, так как я не полностью знаком с этим аспектом Weblogic.

Основной учебник - это блок-схема из документации Oracle.

Сообщения журнала, которые у вас есть, показывают основные вещи, происходящие в том, что касается поиска JNDI фабрики соединений, создания соединения, создания сеанса из этого соединения, поиска JNDI назначения, регистрации пользователей и производителей.

Кажется, что после этого происходит сбой, когда он понимает, что существует более одного потребителя с включенной предварительной загрузкой .

Эта предварительная выборка является свойством Synchronous Consumer, который позволяет выполнять предварительную выборку пакетов сообщений для повышения производительности . См. Раздел «Использование режима предварительной выборки для создания синхронного конвейера сообщений»

В консоли администратора попробуйте , установив для параметра «Режим предварительной выборки для синхронного потребителя» значение «Отключено»

Другие документы, с которыми я столкнулся - это код ошибки объяснение

BEA-055167 Ошибка: один сеанс не может поддерживать более одного синхронный потребитель предварительной выборки сообщений.

Описание

Один сеанс не может поддерживать более одного синхронного потребитель предварительной загрузки сообщений.

Причина - открыт другой синхронный потребитель предварительной загрузки сообщений.

Действие - закройте другого синхронного потребителя предварительной выборки сообщений.

...