springboot配置rabbitmq的序列化反序列化格式

SpringBoot封装了rabbitmq中,发送对象和接收对象时,会统一将对象和消息互相转换

会用到MessageConverter转换接口

在发送消息时,

会将Object转换成Message Message createMessage(Object object, MessageProperties messageProperties)

接收消息时

SimpleMessageListenerContainer容器监听消息时,会调用SimpleMessageListenerContainer.messageListener的消息转换器将Message转换成对象 Object fromMessage(Message message)

Springboot中,默认的rabbitMq的序列化类是:SimpleMessageConverter

SimpleMessageConverter

将Object对象 和 Message 互相转换的规则

这里存在一个问题

如果发送方: object类是 com.zwh.user

但是接受方没有这个路径的类时,会抛出异常,not found class

所以发送消息时,最好手动将消息转换成String

Jackson2JsonMessageConverter 转换器

这个方式不会出现上面SimpleMessageConverter转换器的 not found class错误

如果项目中要统一的序列化格式, 需要显示声明 转换bean

因为自动配置类RabbitAutoConfiguration 和 RabbitAnnotationDrivenConfiguration

会自动获取Spring 容器中MessageConverter实现类bean数据

并将转换器设置到 RabbitTemplate 和 SimpleRabbitListenerContainerFactory.setMessageConverter() 中

注意:如果 RabbitTemplate 配置的 jackson 序列化,而 listener没有配置(默认SimpleMessageConverter),则接受消息转换成object时将会报错

如下配置

报错为:

ListenerExecutionFailedException: Listener method could not be invoked with the incoming message

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

消息转换错误,消息被拒绝

Original: https://www.cnblogs.com/gne-hwz/p/15668947.html
Author: 海绵般汲取
Title: springboot配置rabbitmq的序列化反序列化格式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541152/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 我是如何用IDEA调试BUG的?

    最近小明的bug有点多,忙的连王者荣耀都顾不上玩了,导致现在不得不抽点时间研究一下作为当前大多Java程序员开发工具的IDEA DEBUG功能,以提高效率。 一、条件断点 场景:我…

    Java 2023年6月14日
    080
  • Elasticsearch 入门实战(1)–简介

    Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎;本文主要介绍其基本概念。 1、概述 Elasticsearch 是一个分布式、高扩展、高实时的搜…

    Java 2023年6月16日
    078
  • JVM调优案例分析(4)

    1.概述 前面三篇介绍了处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题 时,除了知识与工具外,经验也是一个很重要的因素。因此本章将与读者分享几个比较 有代表性的实际案…

    Java 2023年6月13日
    090
  • spring data jpa动态查询返回自定义对象

    动态查询返回自定义对象 1、一般情况下使用spring jpa封装的JpaSpecificationExecutor和JpaRepository的接口,这个好处就是在于很多方法jp…

    Java 2023年6月8日
    079
  • Docker实用篇

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月13日
    078
  • Springboot 生成验证码

    一、目录结构 二、功能讲解 (1)验证码配置文件 打开KaptchaConfig.java java;gutter:true @Component public class Kap…

    Java 2023年5月30日
    076
  • 从SVN完美迁移到Git,我只用了5分钟

    为什么现在大家都不用SVN了? SVN (Subversion) 是一个曾经热门的集中式版本控制工具,然而 Git 作为分布式版本控制工具,近年来特别受欢迎,很多公司、开发人员开始…

    Java 2023年6月8日
    0110
  • JAVA UUID 生成

    在Java中生成UUID主要有以下几种方式: JDK1.5如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID:java.util.UUID,直…

    Java 2023年5月29日
    058
  • [转]jdk8中map新增的merge方法

    1 前言 2 内容 1.Map.merge方法介绍 jdk8对于许多常用的类都扩展了一些面向函数,lambda表达式,方法引用的功能,使得java面向函数编程更为方便。其中Map….

    Java 2023年5月30日
    0165
  • Java集合

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    079
  • 面试突击57:聚簇索引=主键索引吗?

    在 InnoDB 引擎中,每张表都会有一个特殊的索引”聚簇索引”,也被称之为聚集索引,它是用来存储行数据的。 一般情况下,聚簇索引等同于主键索引,但这里有一…

    Java 2023年5月29日
    087
  • JAVA常量池

    Java中的常量池,实际上分为两种形态: 静态常量池和 运行时常量池。一、 静态常量池 即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包…

    Java 2023年5月29日
    082
  • NO5 维护项目的软件开发方式解决方案 (设计三步之一)

    维护项目的软件开发方式解决方案 前言 参与这个项目有两周时间,项目为成熟系统的后期维护,主要开发内容为:系统的项目变更和功能的追加。 一:项目情况说明 系统是一个成熟的产品,分别出…

    Java 2023年6月8日
    072
  • 记一次k8s部署问题

    问题描述 在k8s master节点按步骤创建成功后,执行从节点的加入操作,发现一直超时无法加入 问题日志 [root@node02 kubernetes-1.14]# kubea…

    Java 2023年6月9日
    0179
  • SpringCloud:SpringCloud与SpringBoot版本对应关系

    SpringCloud官网 https://spring.io/projects/spring-cloud#learn 通过版本号点击 Reference Doc ; Suppor…

    Java 2023年5月30日
    082
  • 自动备份软件 —— Syncovery 7.98s Pro、Enterprise

    SynCovery自动备份软件原名Super FlexibleSynchronizer,是目前功能最为强大的实时自动备份工具,连FTP、WebDAV等全部支持!最近从V6开始改用比…

    Java 2023年5月30日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球