简体   繁体   English

spring-boot 关机兔子 NoClassDefFoundError

[英]spring-boot shutdown rabbit NoClassDefFoundError

Occasionally NoClassDefFoundError is prompted to quit the JVM process, causing the JVM process to quit normally.偶尔会提示NoClassDefFoundError退出JVM进程,导致JVM进程正常退出。

https://github.com/spring-projects/spring-amqp/issues/822 https://github.com/spring-projects/spring-amqp/issues/822

I use:我用:

compile "org.springframework.boot:spring-boot-starter-amqp:2.0.5.RELEASE"

error1:错误1:

2018-10-15 11:16:27,350 [Thread-13] [] [WARN ] o.s.c.s.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:264) - Failed to stop bean 'org.springframework.amqp.rabbit.config.internalRabbitListenerEndpointRegistry'
java.lang.NoClassDefFoundError: org/springframework/amqp/rabbit/listener/RabbitListenerEndpointRegistry$AggregatingCallback
        at org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry.stop(RabbitListenerEndpointRegistry.java:260)
        at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:238)
        at org.springframework.context.support.DefaultLifecycleProcessor.access$300(DefaultLifecycleProcessor.java:53)
        at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:377)
        at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:210)
        at org.springframework.context.support.DefaultLifecycleProcessor.onClose(DefaultLifecycleProcessor.java:128)
        at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1005)
        at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:933)
Caused by: java.lang.ClassNotFoundException: org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry$AggregatingCallback
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 8 common frames omitted

error2:错误2:

2018-10-15 11:16:57,353 [Thread-13] [] [INFO ] o.s.c.s.DefaultLifecycleProcessor.stop(DefaultLifecycleProcessor.java:387) - Failed to shut down 1 bean with phase value 2147483647 within timeout of 30000: [org.springframework.amqp.rabbit.config.internalRabbitListenerEndpointRegistry]
2018-10-15 11:16:57,358 [Thread-13] [] [WARN ] o.s.c.s.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:264) - Failed to stop bean 'rabbitTemplate'
java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: org/springframework/amqp/rabbit/listener/DirectReplyToMessageListenerContainer
        at org.springframework.amqp.rabbit.core.RabbitTemplate.isRunning(RabbitTemplate.java:791)
        at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:231)
        at org.springframework.context.support.DefaultLifecycleProcessor.access$300(DefaultLifecycleProcessor.java:53)
        at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:377)
        at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:210)
        at org.springframework.context.support.DefaultLifecycleProcessor.onClose(DefaultLifecycleProcessor.java:128)
        at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1005)
        at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:933)
Caused by: java.lang.NoClassDefFoundError: org/springframework/amqp/rabbit/listener/DirectReplyToMessageListenerContainer
        ... 8 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.amqp.rabbit.listener.DirectReplyToMessageListenerContainer
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 8 common frames omitted
2018-10-15 11:16:57,364 [AMQP Connection 192.168.31.231:5672] [] [ERROR] c.r.c.i.ForgivingExceptionHandler.log(ForgivingExceptionHandler.java:119) - An unexpected connection driver error occured
java.lang.NoClassDefFoundError: com/rabbitmq/client/impl/ConsumerDispatcher$2
        at com.rabbitmq.client.impl.ConsumerDispatcher.handleCancelOk(ConsumerDispatcher.java:91)
        at com.rabbitmq.client.impl.ChannelN$7.transformReply(ChannelN.java:1464)
        at com.rabbitmq.client.impl.ChannelN$7.transformReply(ChannelN.java:1458)
        at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.handleCommand(AMQChannel.java:478)
        at com.rabbitmq.client.impl.RpcContinuationRpcWrapper.complete(RpcContinuationRpcWrapper.java:38)
        at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:196)
        at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111)
        at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:643)
        at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47)
        at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:581)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: com.rabbitmq.client.impl.ConsumerDispatcher$2
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 11 common frames omitted

thread dump:线程转储:

"Thread-13" #45 prio=5 os_prio=0 tid=0x00007f000c024800 nid=0x108b in Object.wait() [0x00007effcd4e4000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000000e779bf50> (a com.rabbitmq.utility.BlockingValueOrException)
    at com.rabbitmq.utility.BlockingCell.get(BlockingCell.java:73)
    - locked <0x00000000e779bf50> (a com.rabbitmq.utility.BlockingValueOrException)
    at com.rabbitmq.utility.BlockingCell.uninterruptibleGet(BlockingCell.java:120)
    - locked <0x00000000e779bf50> (a com.rabbitmq.utility.BlockingValueOrException)
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:494)
    at com.rabbitmq.client.impl.ChannelN.basicCancel(ChannelN.java:1477)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1032)
    - locked <0x0000000088906598> (a java.lang.Object)
    at com.sun.proxy.$Proxy84.basicCancel(Unknown Source)
    at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.basicCancel(BlockingQueueConsumer.java:399)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doShutdown(SimpleMessageListenerContainer.java:521)
    - locked <0x0000000088906a60> (a java.lang.Object)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.shutdown(AbstractMessageListenerContainer.java:1100)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.destroy(AbstractMessageListenerContainer.java:1042)
    at org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry.destroy(RabbitListenerEndpointRegistry.java:221)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:256)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:571)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:543)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1054)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:504)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1061)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1037)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1013)
    at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:933)
    - locked <0x00000000879b14a8> (a java.lang.Object)

Rabbit.MainLoopThread has exited, but SimpleMessageListenerContainer is still waiting for a message to respond. Rabbit.MainLoopThread已退出,但SimpleMessageListenerContainer仍在等待消息响应。 In fact, it will never receive a message.事实上,它永远不会收到消息。 This thread prevents the JVM process from quitting properly.此线程会阻止 JVM 进程正确退出。

I don't know why NoClassDefFoundError is prompted here.不知道为什么这里提示NoClassDefFoundError。 I'm sure these classes exist, and it's not necessarily possible.我确信这些类是存在的,而且不一定是可能的。 I haven't found a reproducing method yet.我还没有找到重现的方法。 Initially I used ampq-client-4.0.x, which I thought was too low, and I've upgraded spring-boot-2.x and ampq-client-5.x, but there's the same problem.一开始我用的是ampq-client-4.0.x,觉得太低了,后来升级了spring-boot-2.x和ampq-client-5.x,还是一样的问题。 I really feel helpless.我真的觉得很无助。 Please give me some hints.请给我一些提示。

This is my dependence.这是我的依赖。 spring-boot-starter-amqp is the default. spring-boot-starter-amqp 是默认设置。 I didn't modify it.我没有修改它。

\--- org.springframework.boot:spring-boot-starter-amqp:2.0.5.RELEASE
     +--- org.springframework.boot:spring-boot-starter:2.0.5.RELEASE (*)
     +--- org.springframework:spring-messaging:5.0.9.RELEASE
     |    +--- org.springframework:spring-beans:5.0.9.RELEASE -> 5.1.0.RELEASE (*)
     |    \--- org.springframework:spring-core:5.0.9.RELEASE -> 5.1.0.RELEASE (*)
     \--- org.springframework.amqp:spring-rabbit:2.0.6.RELEASE
          +--- org.springframework.amqp:spring-amqp:2.0.6.RELEASE
          |    +--- org.springframework:spring-core:5.0.9.RELEASE -> 5.1.0.RELEASE (*)
          |    \--- org.springframework.retry:spring-retry:1.2.2.RELEASE
          |         \--- org.springframework:spring-core:4.3.13.RELEASE -> 5.1.0.RELEASE (*)
          +--- com.rabbitmq:amqp-client:5.1.2
          |    \--- org.slf4j:slf4j-api:1.7.25
          +--- org.springframework:spring-context:5.0.9.RELEASE -> 5.1.0.RELEASE (*)
          +--- org.springframework:spring-messaging:5.0.9.RELEASE (*)
          +--- org.springframework:spring-tx:5.0.9.RELEASE -> 5.1.0.RELEASE (*)
          \--- org.springframework:spring-web:5.0.9.RELEASE -> 5.1.0.RELEASE (*)

This is my dependence.这是我的依赖。 spring-boot-starter-amqp is the default. spring-boot-starter-amqp 是默认设置。 I didn't modify it.我没有修改它。

if you are using newrelic agent, desable spring oap instrumentation in newrelic config.如果您使用的是 newrelic 代理,请在 newrelic 配置中禁用 spring oap 检测。 Ex: com.newrelic.instrumentation.spring-aop-2: enabled: false例如:com.newrelic.instrumentation.spring-aop-2:启用:假

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM