Подписчик Spring Durable JMS в TomEE (установка идентификатора клиента для используемого соединения не разрешена)

#java #spring #apache-tomee #tomee-8

#java #весна #apache-tomee #tomee-8

Вопрос:

Я нахожусь в процессе обновления приложения, которое работало на TomEE 7, до TomEE 8, и при этом мы начали получать ошибки в отношении наших контейнеров прослушивателя сообщений Spring. TomEE 8 запускает Apache Active MQ 5.16, где TomEE 7 запускает Apache Active MQ 5.15.13.

В течение весны мы получаем фабрику соединений через поиск JNDI, который определен в нашем tomee.xml следующим образом

 <tomee>

  <Connector id="resources/jms/ConnectionFactory" type="javax.jms.ConnectionFactory">
      ResourceAdapter=ActiveMQResourceAdapter
      TransactionSupport xa
      PoolMaxSize 10
      PoolMinSize 0
      ConnectionMaxWaitMilliseconds 15000
      ConnectionMaxIdleMinutes 15
      MaxSessions=5
  </Connector>

  <Resource id="ActiveMQResourceAdapter" type="ActiveMQResourceAdapter">
      BrokerXmlConfig=xbean:file:conf/activemq.xml
      ServerUrl=tcp://localhost:61616
  </Resource>

</tomee>
 

В течение весны мы получаем фабрику соединений следующим образом

 <jee:jndi-lookup id="jmsFactory" jndi-name="jms/ConnectionFactory" expected-type="javax.jms.ConnectionFactory" />
 

DefaultMessageListenerContainers настроены следующим образом

 <jms:listener-container container-type="default" connection-factory="jmsFactory" client-id="clientId" cache="connection" destination-type="durableTopic" transaction-manager="transactionManager">
        <jms:listener id="responses" destination="response" ref="msgHandler" />
    </jms:listener-container>
 

И все это работает, как и ожидалось, на TomEE 7, однако теперь, когда мы перешли на TomEE 8, наши DefaultMessageListenerContainers выдают следующее исключение

 [org.springframework.jms.listener.DefaultMessageListenerContainer] - Could not refresh JMS Connection for destination 'response' - retrying using FixedBackOff{interval=5000, currentAttempts=9, maxAttempts=unlimited}. Cause: Setting clientID on a used Connection is not allowed
 

Очевидно, что мы делаем что-то неправильное с обновлением, как правильно настроить DMLC с долговременными темами с помощью транзакции, управляемой JTA?

Комментарии:

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

Ответ №1:

После дальнейшего тестирования я смог выяснить, что проблема была связана с максимальным размером пула, настроенным на фабрике соединений в tomee.xml . Увеличив это число, я смог преодолеть эту проблему.