最近项目中,消费端在消费MQ队列中的消息中报错:Fatal message conversion error; message rejected; it will be dropped or routed to a dead letter exchange ,if so configure.......

org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message
Endpoint handler details:
Method [public void com.rabbit.producer.RabbitProducer.receiver.OrderRecevier.onOrderMessage(com.rabbit.producer.RabbitProducer.entity.Order,com.rabbitmq.client.Channel,java.util.Map<java.lang.String, java.lang.Object>) throws java.lang.Exception]
Bean [com.rabbit.producer.RabbitProducer.receiver.OrderRecevier@600b7b3d]at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:185) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:120) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1414) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1337) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1324) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1303) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:817) [spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:801) [spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$700(SimpleMessageListenerContainer.java:77) [spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1042) [spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at java.lang.Thread.run(Thread.java:745) [na:1.8.0_71]
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [com.rabbit.Springboot4RabbitMQ.entity.Order] to [com.rabbit.producer.RabbitProducer.entity.Order] for GenericMessage [payload=Order [id=RabbitMQTestId0002, name=HelloWorld, messageId=1538919928275$0836e0e7-4976-457e-92fb-44b937255855], headers={amqp_receivedDeliveryMode=PERSISTENT, amqp_receivedRoutingKey=order.ABC, amqp_receivedExchange=order-exchange, amqp_deliveryTag=1, amqp_consumerQueue=order-queue, amqp_redelivered=false, id=0ffe4dcd-048f-f274-bca9-5550f9ecebb1, amqp_consumerTag=amq.ctag-82Oo3kl1I138E2pvVRsczA, contentType=application/x-java-serialized-object, timestamp=1538919929083}]at org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver.resolveArgument(PayloadArgumentResolver.java:144) ~[spring-messaging-5.0.8.RELEASE.jar:5.0.8.RELEASE]at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:116) ~[spring-messaging-5.0.8.RELEASE.jar:5.0.8.RELEASE]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:137) ~[spring-messaging-5.0.8.RELEASE.jar:5.0.8.RELEASE]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:109) ~[spring-messaging-5.0.8.RELEASE.jar:5.0.8.RELEASE]at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:51) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:182) ~[spring-rabbit-2.0.5.RELEASE.jar:2.0.5.RELEASE]... 10 common frames omitted

经过定位分析,原因是在MQ消息的生产端,设置了序列化转换Jackson2JsonMessageConverter,而默认的序列化类为SimpleMessageConverter。且在消费端没有设置反序列化转换。

解决办法:

写了个自定义MessageConverter,自定义类继承了Jackson2JsonMessageConverter,重写了createMessage方法,指定部分对象的消息走SimpleMessageConverter的序列化逻辑,其余走Jackson2JsonMessageConverter的序列化逻辑。

知识补充:

RabbitMq的序列化是指Message的body属性,即我们真正需要传输的内容。

RabbitMq抽象出一个MessageConvert接口处理消息的序列化,其实现有SimpleMessageConverter,Jackson2JsonMessageConverter等。

其中默认的序列化类为SimpleMessageConverter

只有调用了convertAndSend方法才会使用相应的MessageConvert进行消息的序列化与反序列化。

参考:https://blog.csdn.net/zhaozhenzuo/article/details/46623213

https://blog.csdn.net/Sadlay/article/details/86716028

Fatal message conversion error; message rejected; it will be dropped or routed to相关推荐

  1. Fatal message conversion error;message rejected;it will be dropped or routed to a dead letter exchan

    在使用rabbitmq的时候出现消息反序列化失败,如下异常: Fatal message conversion error; message rejected; it will be dropped ...

  2. cas单点注销失败Error Sending message to url endpoint

    最近在做cas单点登录时,由于是单点登录.必然会涉及到单点注销,然而在做单点注销时由于对cas注销机制不了解加之测试条件所致,所有测试都是在本机下完成(机器性能较低,没用虚拟机):导致折腾了很久.网上 ...

  3. nova instance出错:message: Proxy error: 502 Read from server failed

    执行 $ nova resize instance1 时候出错: {"message": "Proxy error: 502 Read from server faile ...

  4. selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist

    在centos中使用无头chrome报以下错误 selenium.common.exceptions.WebDriverException: Message: unknown error: DevTo ...

  5. Transport (VMDB) error -44: Message

     关于点击电源按钮的时候出现了这情况Transport (VMDB) error -44: Message.   虚拟机有个服务没开.开始菜单--运行--services.msc 回车   找到VMw ...

  6. error: [FabricCAClientService.js]: Failed to enroll admin, error:%o message=Calling enroll endpoint

    参考文章:Failed to enroll admin 1.执行fabcar示例程序时,node enrollAdmin.js报错: error: [FabricCAClientService.js] ...

  7. selenium headless报错Message: unknown error: failed to wait for extension background page to load

    完整报错是: selenium.common.exceptions.WebDriverException: Message: unknown error: failed to wait for ext ...

  8. Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 错误说明 周末用自家电脑做点事情,安装了一遍github,在克隆项目做了一些更改准备推送的时候报 ...

  9. 解决问题 WebDriverException: Message: unknown error: cannot find Chrome binary

    通过jenkins来执行RobotFramework的脚本, 在执行机命令行中运行是完全OK的, 而通过jenkins执行相应的命令就提示下面的错误: 单项预订 =================== ...

最新文章

  1. 写时复制(Copy-On-Write)思想在Java中的应用
  2. 中国公有云三巨头,同时支持Rancher Kubernetes平台
  3. Linux退出vi编辑
  4. cmake 编译选项 add_compile_options CMAKE_CXX_FLAGS 区别
  5. 收藏 | Windows 版 IntelliJ IDEA 快捷键终极大全!
  6. Python3 的内置函数和闭包
  7. 深入浅出PHP&MySQL(影印版)
  8. ubuntu下 显示no module named “lib“或 “lib.xxx“
  9. 获取qt保存对话框中输入文本_PyQt5 输入对话框QInputDialog
  10. mysql create database to_MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)
  11. P1850 [NOIP2016 提高组] 换教室
  12. bat循环导oracle,Oracle备份恢复与批处理文件实操
  13. WebDriver API学习记录
  14. Redis实现消息队列(订阅/发布模式 、LPUSH+BRPOP)
  15. 肿瘤放射物理学(一)计量学中的辐射剂量及其单位
  16. 怎样更改图片格式?怎么转图片的格式?
  17. 网络协会评出十大流氓软件,3721位列榜首
  18. MavSDKMavros学习笔记
  19. 2021年中国报刊出版行业经营现状及A股上市企业对比分析[图]
  20. ruok is not executed because it is not in the whitelist.

热门文章

  1. 随笔-Android openGL-三棱锥纹理
  2. 【CSS】总结前端三剑客之一(CSS基础)
  3. iOS开发笔记之九十四——Swift中的可选类型Optional
  4. 腾讯云ubuntu20.04,免密登录,安装anaconda,并安装远程jupyter notebook,TensorFlow
  5. Android高级页面设计 -- Recycler
  6. 纯原生JS的瀑布流插件Macy.js
  7. 教你如何实现一个完美的移动端瀑布流组件(附源码)
  8. Win10 OneNote 一直卡的登录界面
  9. Bert Ertman专访:将Spring及遗留应用迁移到Java EE 6平台
  10. hive中文繁简转化opencc4j