Spring amqp 使用旧的SpringRabbit 1.7.9将SpringBoot从1.5迁移到2.1.5导致以下异常

Spring amqp 使用旧的SpringRabbit 1.7.9将SpringBoot从1.5迁移到2.1.5导致以下异常,spring-amqp,Spring Amqp,弹簧靴2.1.5 春兔1.7.9 弹簧amqp 1.7.9 使用旧的Spring rabbit 1.7.9将Spring引导从1.5迁移到2.1.5,在部署时导致以下异常: java.net.URLClassLoader@763d9750 ] at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:507) ~[spring-core-5.1.7.RELEASE.jar:5.1.7

弹簧靴2.1.5
春兔1.7.9
弹簧amqp 1.7.9

使用旧的Spring rabbit 1.7.9将Spring引导从1.5迁移到2.1.5,在部署时导致以下异常:

java.net.URLClassLoader@763d9750
]


at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:507) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:404) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:389) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:248) ~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    ... 41 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/rabbitmq/client/QueueingConsumer
    at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_172]
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_172]
    at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_172]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:489) ~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
    ... 44 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.rabbitmq.client.QueueingConsumer
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333) ~[catalina.jar:8.0.39]
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167) ~[catalina.jar:8.0.39]
    ... 48 common frames omitted

IF I exclude amqp-client from spring-rabbit, 
<exclusion>
                    <groupId>org.springframework.amqp</groupId>
                    <artifactId>spring-amqp</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.rabbitmq</groupId>
                    <artifactId>amqp-client</artifactId>
                </exclusion>
java.net。URLClassLoader@763d9750
]
在org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:507)~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
在org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:404)~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
在org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:389)~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
在org.springframework.beans.factory.annotation.AutowiredNotationBeanPostProcessor.determineCandidateConstructors(AutowiredNotationBeanPostProcessor.java:248)~[spring-beans-5.1.7.RELEASE.jar:5.1.7.RELEASE]
... 省略41个公共帧
原因:java.lang.NoClassDefFoundError:com/rabbitmq/client/QueueingConsumer
在java.lang.Class.getDeclaredMethods0(本机方法)~[na:1.8.0_172]
在java.lang.Class.privateGetDeclaredMethods(Class.java:2701)~[na:1.8.0\u 172]
在java.lang.Class.getDeclaredMethods(Class.java:1975)~[na:1.8.0_172]
在org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:489)~[spring-core-5.1.7.RELEASE.jar:5.1.7.RELEASE]
... 省略了44个公共帧
原因:java.lang.ClassNotFoundException:com.rabbitmq.client.QueueingConsumer
在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)~[catalina.jar:8.0.39]
在org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)~[catalina.jar:8.0.39]
... 省略48个公共帧
如果我从spring rabbit中排除amqp客户端,
org.springframework.amqp
春季amqp
com.rabbitmq
amqp客户端
并直接添加amqp客户端依赖项以使用旧版本

<dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>4.0.3</version>
        </dependency>

com.rabbitmq
amqp客户端
4.0.3
部署时引发以下异常, java.lang.NoClassDefFoundError:com/rabbitmq/client/impl/MicrometricsCollector 这是amqp客户端5.4.3的一部分

此外,尝试删除spring rabbit和amqp 1.7.9版本以使用默认rabbitMQ 2.1.6版本和spring引导升级,但由于找不到setCorrelationId方法,仍然失败 问题: 是否可以使用SpringBoot2.1.5(使用Spring5.1.7)和SpringRabbit/AMQP1.7.9版本

我无法更新SpringRabbit/amqp版本,因为我们使用的是由管理队列的团队管理的自定义JAR,而这些自定义JAR使用的是1.7.9版本。
因此,如果我们使用新的SpringRabbit/amqp版本,则在发送消息时,setCorrelationId方法找不到,它将失败

否;1.7.9不能与boot 2.1一起使用;2.1.x与Boot 2.1.x兼容

当前的Boot 2.1.x版本是2.1.10,它使用Spring AMQP 2.1.12

相关性id从
byte[]
转换为
String
,并经历了一个弃用周期,使人们更容易从1.7.x->2.0.x->2.1.x转换

旧版本在1.7.x中被弃用,在2.0.x中被转换,在2.1.x中被删除,因此直接从1.7.x跳到2.1.x更加困难


但是,即使这样,它也只是意味着将类型从
字节[]
更改为
字符串

否;1.7.9不能与boot 2.1一起使用;2.1.x与Boot 2.1.x兼容

当前的Boot 2.1.x版本是2.1.10,它使用Spring AMQP 2.1.12

相关性id从
byte[]
转换为
String
,并经历了一个弃用周期,使人们更容易从1.7.x->2.0.x->2.1.x转换

旧版本在1.7.x中被弃用,在2.0.x中被转换,在2.1.x中被删除,因此直接从1.7.x跳到2.1.x更加困难

但是,即使这样,它也只意味着将类型从
字节[]
更改为
字符串