使用 ActiveMQ“Classic”迁移到 Spring Boot 3

问题描述 投票:0回答:4

我正在尝试使用新命名空间 jakarta.xx 而不是 javax.xx 迁移到 Spring Boot 3,但 ActiveMQ“经典”客户端尚未更新且已弃用。有没有办法继续使用旧的 ActiveMQ 客户端?

我尝试了新的 ActiveMQ Artemis 客户端,但它们似乎无法与 ActiveMQ“Classic”服务器互操作。 包含旧的 ActiveMQ 客户端会导致无法使用 JMSTemplate 进行配置,因为 JMSTemplate 使用 jakarta.xx 并期望来自 jakarta.xx 的

ConnectionFactory
而不是 javax.xx

编辑:没有用,所以唯一的方法是升级到 artemis。这样代码库也几乎没有变化。

编辑:2023 年 4 月:发布新的 ActiveMQ 客户端。您只需要将 spring boot starter active mq 替换为更新版本并包含this

spring-boot activemq activemq-artemis
4个回答
3
投票

正如您所注意到的,没有支持 Jakarta 命名空间 JMS 依赖项的 ActiveMQ 客户端,或者实际上没有支持 JMS 2.0 的 ActiveMQ 客户端,因此您确实需要转移到其他东西,例如 ActiveMQ Artemis 代理和 ActiveMQ Artemis 客户端或 Qpid JMS AMQP 客户端 v2 .1.0 既支持 JMS 2.0 又使用 Jakarta API。

如果您坚持使用 ActiveMQ 5.x,您可以尝试使用 Qpid JMS v2.1.0 客户端,它确实使用了 Jakarata JMS API,但您需要多加小心,因为 5.x 代理不支持 JMS 2.0,因此 API 的某些部分可能会触发意外行为。 5.x 代理中的 AMQP 支持不像 Artemis 代理那样完全集成和支持 JMS 2.0,因此您可能会遇到如果转移到 Artemis 代理就不会看到的问题。

编辑:没有用,所以唯一的方法是升级到 artemis。这样代码库也几乎没有变化。


3
投票

要继续在 Spring 3 和 Jakarta EE 9 中使用 ActiveMQ 5.x,需要在 ActiveMQ 5.x 端进行两个更新——JMS 2.0 支持,然后支持 javax.jms -> jakarta.jms 命名空间更改。

第一部分最大,正在进行中。 ActiveMQ 5.x 主分支有对 JMS 2.0 的预览支持,并计划在不久之后提供 Jakarta 命名空间支持。

这是一个跟踪 ActiveMQ 5.x 中 JMS 2.0 进度的好页面

参考:https://activemq.apache.org/jms2

更新:Apache ActiveMQ 5.18.1 包含一个支持 jakarta 的客户端“activemq-client-jakarta”

编辑:此更改添加了 Spring Boot v3 支持:https://github.com/spring-projects/spring-boot/pull/35048


1
投票

在等待 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 配合得很好


0
投票

如前所述:Jakarta JMS兼容版本ActiveMQ 5.18.0发布。我能够让这个版本在没有 Spring 5.3.x 依赖项的情况下工作:

已删除

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

并包含具有新“jakarta 客户端”依赖项的代理:

<!-- 5.18.0 brings initial JMS 2.0 (javax.jms API) and Jakarta Messaging 3.1 (jakarta.jms API) client support -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-broker</artifactId>
        <version>5.18.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client-jakarta</artifactId>
        <version>5.18.0</version>
    </dependency>

要让它工作:您需要根据您使用的协议从“activemq-client”jar 复制一些配置文件(因为它们在“activemq-client-jakarta”jar 中丢失):

/src/main/resources/META-INF/services/org/apache/activemq/transport/tcp
/src/main/resources/META-INF/services/org/apache/activemq/wireformat/default

我们现在再次能够在我们的服务器上使用(尚未迁移的)未更改的 ActiveMQ 安装发送和接收消息 - 与 Spring Boot 2.7.x 应用程序和 3.0.5 Spring 应用程序并行。

hth, 沃尔夫冈

© www.soinside.com 2019 - 2024. All rights reserved.