Переход на Spring Boot 3 с ActiveMQ "Classic"

Я пытаюсь перейти на Spring Boot 3 с новым пространством имен jakarta.xx вместо javax.xx, но «классический» клиент ActiveMQ не обновлялся и устарел. Есть ли способ продолжить использование старого клиента ActiveMQ?

Я попробовал новый клиент ActiveMQ Artemis, но похоже, что они не совместимы с сервером ActiveMQ «Classic». Включение старого клиента ActiveMQ приводит к невозможности использования JMSTemplate для настройки, поскольку JMSTemplate использует jakarta.xx и ожидает ConnectionFactory от jakarta.xx, а не javax.xx.

Редактировать: не сработало, поэтому единственный способ - перейти на Artemis. Таким образом, кодовая база также почти не изменилась.

Имейте в виду, что Spring Boot 3 использует Jakarta EE 9, который, в свою очередь, использует Jakarta Messaging 3.0, который включает все изменения по сравнению с JMS 2.0, которые ActiveMQ "Classic" не поддерживает.

Justin Bertram 02.12.2022 17:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
3
1
1 101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Как вы заметили, не существует клиента 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.

Samuel 02.12.2022 22:55

Обязательно включите транспортный соединитель AMQP в файле конфигурации ActiveMQ и укажите клиенту правильный порт (порт AMQP по умолчанию — 5672 для TCP и 5671 для SSL).

Tim Bish 02.12.2022 23:23

Извини. Отредактировал не тот комментарий. Я думаю, что самое чистое решение - обновить сервер artemis до весенней загрузки.

Samuel 09.12.2022 13:46

Чтобы продолжить использование 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

Любое обновление, когда это может быть завершено?

zachariahyoung 10.01.2023 16:26

В ожидании обновления 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 звучит немного опасно.

Dale Ogilvie 21.12.2022 00:30

Спасибо, я попробую это решение, даже если это довольно хак.

Samuel 21.12.2022 14:52

@ Самуэль, ты заставил это работать? В нашей системе мы используем SpringIntegration и ActiveMQ. Были планы теперь обновить до SpringBoot 3 с 2, но проблема в том, что брокер не на нашей стороне, поэтому мы не можем просто так переключиться на Artemis...

Artur Jarosz 04.01.2023 14:42

Привет. Я смог без проблем добавить эти зависимости, и при запуске не произошел сбой. Но я также не видел сообщения журнала с «Успешно подключен к очереди». Я продолжу тестирование, надеюсь, к концу недели.

Samuel 04.01.2023 20:25

Другие вопросы по теме