当前位置:   article > 正文

rabbitMQ异常:Execution of Rabbit message listener failed.

execution of rabbit message listener failed.
  1. 2019-07-30 11:25:05.686  WARN 23988 --- [cTaskExecutor-2] s.a.r.l.ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.
  2. org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener threw exception
  3.     at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:949) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  4.     at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:859) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  5.     at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:779) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  6.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:105) [spring-rabbit-1.7.10.RELEASE.jar:na]
  7.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:208) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  8.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1381) [spring-rabbit-1.7.10.RELEASE.jar:na]
  9.     at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:760) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  10.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:1324) [spring-rabbit-1.7.10.RELEASE.jar:na]
  11.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:1294) [spring-rabbit-1.7.10.RELEASE.jar:na]
  12.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1800(SimpleMessageListenerContainer.java:105) [spring-rabbit-1.7.10.RELEASE.jar:na]
  13.     at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1550) [spring-rabbit-1.7.10.RELEASE.jar:na]
  14.     at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
  15. Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to resolve class name. Class not found [com.sse.mars.model.restful.message.RestfulMessage]
  16.     at org.springframework.amqp.support.converter.DefaultJackson2JavaTypeMapper.getClassIdType(DefaultJackson2JavaTypeMapper.java:181) ~[spring-amqp-1.7.10.RELEASE.jar:na]
  17.     at org.springframework.amqp.support.converter.DefaultJackson2JavaTypeMapper.toJavaType(DefaultJackson2JavaTypeMapper.java:140) ~[spring-amqp-1.7.10.RELEASE.jar:na]
  18.     at org.springframework.amqp.support.converter.Jackson2JsonMessageConverter.fromMessage(Jackson2JsonMessageConverter.java:189) ~[spring-amqp-1.7.10.RELEASE.jar:na]
  19.     at org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener.extractMessage(AbstractAdaptableMessageListener.java:236) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  20.     at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter$MessagingMessageConverterAdapter.extractPayload(MessagingMessageListenerAdapter.java:222) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  21.     at org.springframework.amqp.support.converter.MessagingMessageConverter.fromMessage(MessagingMessageConverter.java:118) ~[spring-amqp-1.7.10.RELEASE.jar:na]
  22.     at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.toMessagingMessage(MessagingMessageListenerAdapter.java:122) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  23.     at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:108) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  24.     at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:856) ~[spring-rabbit-1.7.10.RELEASE.jar:na]
  25.     ... 10 common frames omitted
  26. Caused by: java.lang.ClassNotFoundException: com.sse.mars.model.restful.message.RestfulMessage
  27.     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_131]
  28.     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_131]
  29.     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_131]
  30.     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_131]
  31.     at org.springframework.util.ClassUtils.forName(ClassUtils.java:251) ~[spring-core-4.3.19.RELEASE.jar:4.3.19.RELEASE]
  32.     at org.springframework.amqp.support.converter.DefaultJackson2JavaTypeMapper.getClassIdType(DefaultJackson2JavaTypeMapper.java:177) ~[spring-amqp-1.7.10.RELEASE.jar:na]
  33.     ... 18 common frames omitted

一、        是因为你生产者传过去的实体类对象需要实现序列化 implements Serializable。

        如果还是一样的错,你就得去RabbitMQ客户端上的队列消息先删除,因为那些队列消息还是原先的错误的消息。你再重新开程序,就没问题了。

使用mq发送消息:

使用 org.springframework.amqp.rabbit.core.RabbitTemplate 来发送消息到 RabbitMQ 队列时,消息的序列化是由 MessageConverter 完成的。默认情况下,RabbitTemplate 使用 SimpleMessageConverter,它可以处理简单的消息类型(如字符串、字节数组等),但如果您希望发送自定义对象,则需要配置一个适当的 MessageConverter 来序列化和反序列化这些对象。

以下是一种常见的方法,您可以使用 Jackson 库将对象序列化为 JSON 格式并发送到 RabbitMQ 队列:

1、添加 Jackson 依赖项到您的项目中,如果您使用 Maven,可以添加以下依赖项:

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-databind</artifactId>
  4. <version>2.12.5</version> <!-- 请根据您的项目需要使用适当的版本 -->
  5. </dependency>

2、配置 RabbitTemplate 使用 Jackson2JsonMessageConverter 作为消息转换器:

  1. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  2. import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
  3. import org.springframework.amqp.support.converter.MessageConverter;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class RabbitConfig {
  8. @Bean
  9. public MessageConverter jsonMessageConverter() {
  10. return new Jackson2JsonMessageConverter();
  11. }
  12. @Bean
  13. public RabbitTemplate rabbitTemplate() {
  14. RabbitTemplate rabbitTemplate = new RabbitTemplate();
  15. rabbitTemplate.setMessageConverter(jsonMessageConverter());
  16. // 设置 RabbitMQ 服务器地址等其他配置
  17. return rabbitTemplate;
  18. }
  19. }

上述配置使用了 Jackson2JsonMessageConverter,它将对象转换为 JSON 格式并发送到 RabbitMQ 队列。您可以将此配置类添加到您的 Spring Boot 项目中,或根据您的项目结构和需求进行适当的配置。

3、使用 RabbitTemplate 发送消息:

  1. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. @Service
  5. public class MessageService {
  6. private final RabbitTemplate rabbitTemplate;
  7. @Autowired
  8. public MessageService(RabbitTemplate rabbitTemplate) {
  9. this.rabbitTemplate = rabbitTemplate;
  10. }
  11. public void sendMessage(MyCustomObject payload) {
  12. rabbitTemplate.convertAndSend("exchangeName", "routingKey", payload);
  13. }
  14. }

在上述示例中,MyCustomObject 是您要发送的自定义对象。RabbitTemplate 会将其序列化为 JSON 格式并发送到指定的 RabbitMQ 队列。

通过这种配置,您可以轻松地将自定义对象序列化为 JSON 并发送到 RabbitMQ 队列中。请确保您的自定义对象具有适当的 Jackson 注解(如 @JsonProperty)以控制 JSON 序列化的方式。

二、        如果生产者不想序列化,不进行改动,消费者可以直接用对象接收消费的消息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/625958
推荐阅读
相关标签
  

闽ICP备14008679号