升级到Spring Cloud Hoxton.SR3后接收AMQP消息时发生ClassNotFoundException

在将Spring Cloud从Hoxton.SR1升级到Hoxton.SR3之后,即使仍按预期方式处理消息,我们的应用程序也会在每次收到消息时引发以下异常:

java.lang.IllegalStateException: java.lang.ClassnotFoundException: com.mycompany.domain.message.DiagramDeletedMessage
    at org.springframework.integration.mapping.support.JsonHeaders.getclassForValue(JsonHeaders.java:89)
    at org.springframework.integration.mapping.support.JsonHeaders.buildResolvableType(JsonHeaders.java:72)
    at org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper.createJsonResolvableTypHeaderInAny(DefaultAmqpHeaderMapper.java:169)
    at org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper.extractStandardHeaders(DefaultAmqpHeaderMapper.java:155)
    at org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper.extractStandardHeaders(DefaultAmqpHeaderMapper.java:61)
    at org.springframework.integration.mapping.AbstractHeaderMapper.toHeaders(AbstractHeaderMapper.java:266)
    at org.springframework.integration.mapping.AbstractHeaderMapper.toHeadersFromRequest(AbstractHeaderMapper.java:203)
    at org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper.toHeadersFromRequest(DefaultAmqpHeaderMapper.java:337)
    at org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper.toHeadersFromRequest(DefaultAmqpHeaderMapper.java:61)
    at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter$Listener.createMessage(AmqpInboundChannelAdapter.java:281)
    at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter$Listener.onmessage(AmqpInboundChannelAdapter.java:235)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1579)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1498)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer$$Lambda$1393/1038281434.invokeListener(Unknown Source)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1486)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1477)
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1421)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:963)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:913)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:81)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1284)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1190)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassnotFoundException: com.mycompany.domain.message.DiagramDeletedMessage
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:144)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:282)
    at org.springframework.integration.mapping.support.JsonHeaders.getclassForValue(JsonHeaders.java:86)
    ... 22 common frames omitted

这似乎是由于this中执行的更改所致。现在,包含消息FQN的json__TypeId__标头用于尝试解决消息类型。

由于已将异常记录为警告,因此我们现在已将Spring DefaultAmqpHeaderMapper的日志级别设置为ERROR。但是,这也可能隐藏其他可能重要的警告。

我想知道这是否与上述对spring-integration的更改有关,并且最好的方法是避免我们的日志中充满堆栈跟踪。

sml11111 回答:升级到Spring Cloud Hoxton.SR3后接收AMQP消息时发生ClassNotFoundException

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2676959.html

大家都在问