Я пытаюсь перейти на Spring Boot 3 с новым пространством имен jakarta.xx вместо javax.xx, но «классический» клиент ActiveMQ не обновлялся и устарел. Есть ли способ продолжить использование старого клиента ActiveMQ?
Я попробовал новый клиент ActiveMQ Artemis, но похоже, что они не совместимы с сервером ActiveMQ «Classic».
Включение старого клиента ActiveMQ приводит к невозможности использования JMSTemplate для настройки, поскольку JMSTemplate использует jakarta.xx и ожидает ConnectionFactory
от jakarta.xx, а не javax.xx.
Редактировать: не сработало, поэтому единственный способ - перейти на Artemis. Таким образом, кодовая база также почти не изменилась.
Как вы заметили, не существует клиента ActiveMQ, который поддерживает зависимость пространства имен Jakarta от JMS, или на самом деле ни один из них не поддерживает JMS 2.0, поэтому вам действительно нужно перейти на что-то другое, например на брокера ActiveMQ Artemis и клиента ActiveMQ Artemis или клиента Qpid JMS AMQP v2. 1.0, которые поддерживают JMS 2.0 и используют API-интерфейсы Jakarta.
Если вы твердо намерены придерживаться ActiveMQ 5.x, вы можете попробовать использовать клиент Qpid JMS v2.1.0, который использует Jakarata JMS API, но вам нужно быть несколько осторожным, поскольку брокер 5.x не поддерживает JMS 2.0. поэтому некоторые части API могут вызвать неожиданное поведение. Поддержка AMQP в брокере 5.x не так полностью интегрирована и не поддерживает JMS 2.0, как у брокера Artemis, поэтому вы можете столкнуться с проблемами, которых не заметили бы, если бы перешли на брокер Artemis.
Редактировать: не сработало, поэтому единственный способ - перейти на Artemis. Таким образом, кодовая база также почти не изменилась.
Спасибо за подробное объяснение. Я использую ActiveMQ только для отправки и получения простых сообщений очереди. Я попробую Qpid и обновлю свой вопрос, если мне удалось подключиться к «классическому» серверу ActiveMQ.
Обязательно включите транспортный соединитель AMQP в файле конфигурации ActiveMQ и укажите клиенту правильный порт (порт AMQP по умолчанию — 5672 для TCP и 5671 для SSL).
Извини. Отредактировал не тот комментарий. Я думаю, что самое чистое решение - обновить сервер artemis до весенней загрузки.
Чтобы продолжить использование ActiveMQ 5.x с Spring 3 и Jakarta EE 9, необходимы два обновления на стороне ActiveMQ 5.x — поддержка JMS 2.0, а затем поддержка изменения пространства имен javax.jms -> jakarta.jms.
Первая часть самая большая, и она находится в стадии реализации. Основная ветвь ActiveMQ 5.x имеет предварительную поддержку JMS 2.0, и вскоре после этого планируется обеспечить поддержку пространства имен Jakarta.
Это хорошая страница для отслеживания прогресса JMS 2.0 в ActiveMQ 5.x.
ссылка: https://activemq.apache.org/jms2
ОБНОВЛЕНИЕ: Доступен временный клиент в Джакарте, подходящий для перехода: https://github.com/hyteio/activemq-client-jakarta
Любое обновление, когда это может быть завершено?
В ожидании обновления ActiveMQ для Jakarta EE 9 я удалил
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
И включены
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.17.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>5.3.24</version>
</dependency>
Это работало как шарм с Spring Boot 3.0.0.
Привет, добавление зависимости Spring 5.3.x в приложение Spring 6.0.x звучит немного опасно.
Спасибо, я попробую это решение, даже если это довольно хак.
@ Самуэль, ты заставил это работать? В нашей системе мы используем SpringIntegration и ActiveMQ. Были планы теперь обновить до SpringBoot 3 с 2, но проблема в том, что брокер не на нашей стороне, поэтому мы не можем просто так переключиться на Artemis...
Привет. Я смог без проблем добавить эти зависимости, и при запуске не произошел сбой. Но я также не видел сообщения журнала с «Успешно подключен к очереди». Я продолжу тестирование, надеюсь, к концу недели.
Имейте в виду, что Spring Boot 3 использует Jakarta EE 9, который, в свою очередь, использует Jakarta Messaging 3.0, который включает все изменения по сравнению с JMS 2.0, которые ActiveMQ "Classic" не поддерживает.