Создано решение верблюда, которое действует как клиент веб-логики JMS, считывающий сообщения из очередей JMS с помощью селектора.
Решение верблюда настроено на использование транзакций, JmsTransactionManager и потребителей кэша.JMS-клиент при запуске создает потребителей в соответствии с concurrentConsumers и считывает сообщения из очереди до истечения времени ожидания (receivetimeout).С точки зрения клиента все работает нормально:
Журнал каждой попытки получения при возникновении тайм-аута:
- Создание новой транзакции с именем [JmsConsumer [jms / IN_QUEUE]]: PROPAGATION_REQUIRED, ISOLATION_DEFAULT
- Создана JMS-транзакция в сеансе [Кэшированный JMS-сеанс: weblogic.jms.client.WLSessionImpl@9220922] из соединения [Shared JMS-соединение: weblogic.jms.client.WLConnectionImpl@f400f4]
- Инициированиефиксация транзакции
- фиксация транзакции JMS в сеансе [Cached JMS Session: weblogic.jms.client.WLSessionImpl@9220922]
Но на стороне сервера журнал подразумевает, что JMSклиент создает и уничтожает новых потребителей, т. е. новый идентификатор потребителя, каждый раз, когда клиент получает тайм-аут при чтении очереди для сообщений.
Примечание. Если клиент JMS получает сообщение, т. е. нет тайм-аута, тот же потребитель в соответствии св журнал повторно.
Разве нельзя использовать транзакции и повторно использовать потребителей при получении тайм-аутов?