spring-cloud / spring-cloud-stream-binder-rabbit

Apache License 2.0
156 stars 133 forks source link

When using Spring Cloud Bus to integrate Rabbit MQ, java.lang.ClassNotFoundException: com.rabbitmq.client.ShutdownListener is thrown #319

Closed yjy1992 closed 3 years ago

yjy1992 commented 3 years ago

I have such a problem When using Spring Cloud Bus to integrate Rabbit MQ and start bean'outputBindingLifecycle', java.lang.ClassNotFoundException: com.rabbitmq.client.ShutdownListener is thrown `Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-05-24 19:28:16.109 ERROR 13216 --- [ main] o.s.boot.SpringApplication : Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.cloud.stream.binder.rabbit.config.RabbitServiceAutoConfiguration]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on class org.springframework.cloud.stream.binder.rabbit.config.RabbitMessageChannelBinderConfiguration at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:184) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:52) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:157) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:121) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:885) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:161) ~[spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1258) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.xy.ConfigServerApplication.main(ConfigServerApplication.java:14) [classes/:na] Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [org.springframework.cloud.stream.binder.rabbit.config.RabbitServiceAutoConfiguration]; nested exception is java.lang.IllegalStateException: Failed to introspect annotated methods on class org.springframework.cloud.stream.binder.rabbit.config.RabbitMessageChannelBinderConfiguration at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:646) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:303) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:202) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:170) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:316) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:233) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:271) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:91) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:694) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:137) ~[spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE] at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinderInstance(DefaultBinderFactory.java:214) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:143) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:308) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:208) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binding.BindableProxyFactory.bindOutputs(BindableProxyFactory.java:252) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binding.OutputBindingLifecycle.doStartWithBindable(OutputBindingLifecycle.java:46) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binding.AbstractBindingLifecycle$$Lambda$614/2040500590.accept(Unknown Source) ~[na:na] at java.util.Iterator.forEachRemaining(Unknown Source) ~[na:1.8.0_51] at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source) ~[na:1.8.0_51] at java.util.stream.ReferencePipeline$Head.forEach(Unknown Source) ~[na:1.8.0_51] at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.start(AbstractBindingLifecycle.java:47) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.cloud.stream.binding.OutputBindingLifecycle.start(OutputBindingLifecycle.java:29) ~[spring-cloud-stream-2.0.3.RELEASE.jar:2.0.3.RELEASE] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] ... 14 common frames omitted Caused by: java.lang.IllegalStateException: Failed to introspect annotated methods on class org.springframework.cloud.stream.binder.rabbit.config.RabbitMessageChannelBinderConfiguration at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:169) ~[spring-core-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:393) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:318) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:636) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE] ... 41 common frames omitted Caused by: java.lang.NoClassDefFoundError: com/rabbitmq/client/ShutdownListener at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_51] at java.lang.ClassLoader.defineClass(Unknown Source) ~[na:1.8.0_51] at java.security.SecureClassLoader.defineClass(Unknown Source) ~[na:1.8.0_51] at java.net.URLClassLoader.defineClass(Unknown Source) ~[na:1.8.0_51] at java.net.URLClassLoader.access$100(Unknown Source) ~[na:1.8.0_51] at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_51] at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.8.0_51] at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_51] at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_51] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_51] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_51] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_51] at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_51] at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[na:1.8.0_51] at java.lang.Class.getDeclaredMethods(Unknown Source) ~[na:1.8.0_51] at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:158) ~[spring-core-5.0.8.RELEASE.jar:5.0.8.RELEASE] ... 45 common frames omitted Caused by: java.lang.ClassNotFoundException: com.rabbitmq.client.ShutdownListener at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_51] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_51] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_51] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_51] ... 61 common frames omitted`

yjy1992 commented 3 years ago

this is my pom.xml

`

org.springframework.boot spring-boot-starter-actuator
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>

    <!--amqp -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
</dependencies>`
yjy1992 commented 3 years ago

my spring boot version

`

org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE

`

yjy1992 commented 3 years ago

my spirng cloud version

org.springframework.cloud spring-cloud-dependencies Finchley.SR4 pom import
olegz commented 3 years ago

You are not showing any versions in your POM, but based on the stack trace you are definitely using old and potentially incompatible versions of Rabbit, stream etc. Perhaps you are manually managing versions of individual dependencies which results in this incompatibility. Consider relying on the cloud BOM and let it pull the dependencies

olegz commented 3 years ago

Just to add to the above, com.rabbitmq.client.ShutdownListener was introduced in RabbitMQ client since v. 4.x. So look at the version of RabbitMQ libraries on your classpath

yjy1992 commented 3 years ago

Just to add to the above, com.rabbitmq.client.ShutdownListener was introduced in RabbitMQ client since v. 4.x. So look at the version of RabbitMQ libraries on your classpath

Thank you for your reply. I know that the problem is that there is a problem with the pulled jar package

sabbyanandan commented 3 years ago

Closing due to no activity.