Fatal message conversion error; message rejected; it will be dropped or routed to
最近项目中,消费端在消费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相关推荐
- 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 ...
- cas单点注销失败Error Sending message to url endpoint
最近在做cas单点登录时,由于是单点登录.必然会涉及到单点注销,然而在做单点注销时由于对cas注销机制不了解加之测试条件所致,所有测试都是在本机下完成(机器性能较低,没用虚拟机):导致折腾了很久.网上 ...
- nova instance出错:message: Proxy error: 502 Read from server failed
执行 $ nova resize instance1 时候出错: {"message": "Proxy error: 502 Read from server faile ...
- selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist
在centos中使用无头chrome报以下错误 selenium.common.exceptions.WebDriverException: Message: unknown error: DevTo ...
- Transport (VMDB) error -44: Message
关于点击电源按钮的时候出现了这情况Transport (VMDB) error -44: Message. 虚拟机有个服务没开.开始菜单--运行--services.msc 回车 找到VMw ...
- 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] ...
- 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 ...
- Github-推送代码报错“error:RPC failed;curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL,errno 10054”解决方案
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 错误说明 周末用自家电脑做点事情,安装了一遍github,在克隆项目做了一些更改准备推送的时候报 ...
- 解决问题 WebDriverException: Message: unknown error: cannot find Chrome binary
通过jenkins来执行RobotFramework的脚本, 在执行机命令行中运行是完全OK的, 而通过jenkins执行相应的命令就提示下面的错误: 单项预订 =================== ...
最新文章
- 写时复制(Copy-On-Write)思想在Java中的应用
- 中国公有云三巨头,同时支持Rancher Kubernetes平台
- Linux退出vi编辑
- cmake 编译选项 add_compile_options CMAKE_CXX_FLAGS 区别
- 收藏 | Windows 版 IntelliJ IDEA 快捷键终极大全!
- Python3 的内置函数和闭包
- 深入浅出PHP&MySQL(影印版)
- ubuntu下 显示no module named “lib“或 “lib.xxx“
- 获取qt保存对话框中输入文本_PyQt5 输入对话框QInputDialog
- mysql create database to_MySQL中CREATE DATABASE和CREATE SCHEMA区别(转)
- P1850 [NOIP2016 提高组] 换教室
- bat循环导oracle,Oracle备份恢复与批处理文件实操
- WebDriver API学习记录
- Redis实现消息队列(订阅/发布模式 、LPUSH+BRPOP)
- 肿瘤放射物理学(一)计量学中的辐射剂量及其单位
- 怎样更改图片格式?怎么转图片的格式?
- 网络协会评出十大流氓软件,3721位列榜首
- MavSDKMavros学习笔记
- 2021年中国报刊出版行业经营现状及A股上市企业对比分析[图]
- ruok is not executed because it is not in the whitelist.
热门文章
- 随笔-Android openGL-三棱锥纹理
- 【CSS】总结前端三剑客之一(CSS基础)
- iOS开发笔记之九十四——Swift中的可选类型Optional
- 腾讯云ubuntu20.04,免密登录,安装anaconda,并安装远程jupyter notebook,TensorFlow
- Android高级页面设计 -- Recycler
- 纯原生JS的瀑布流插件Macy.js
- 教你如何实现一个完美的移动端瀑布流组件(附源码)
- Win10 OneNote 一直卡的登录界面
- Bert Ertman专访:将Spring及遗留应用迁移到Java EE 6平台
- hive中文繁简转化opencc4j