RabbitMq消息序列化简述

本文深入探讨了RabbitMQ中序列化机制的重要性及其对性能的影响,对比了JDK序列化、Hessian、protobuf等不同序列化方式,并着重介绍了如何通过使用Jackson2JsonMessageConverter等实现更高效的数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

涉及网络传输的应用,序列化不可避免。发送端以某种规则将消息转成byte数组进行发送。

接收端则以约定的规则进行byte[]数组的解析。


序列化的选择可以是jdk序列化,hessian,jackson,protobuf等。

其中jdk序列化的缺点是性能及要求发送方与接收方都是java应用。

hessia,protobuf等都是基于压缩重复字段的思想,减少传输数据量以提高性能。

jackson是以json表示来传输数据,性能优于jdk序列化。


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

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

其中默认的序列化类为SimpleMessageConverter。

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


SimpleMessageConverter对于要发送的消息体body为字节数组时,不进行处理。

对于如果是String,则将String转成字节数组。

对于如果是Java对象,则使用jdk序列化将消息转成字节数组,转出来的结果较大,含class类名,类相应方法等信息。因此性能较差。


当使用RabbitMq作为中间件时,数据量比较大,此时就要考虑使用类似Jackson2JsonMessageConverter,hessian等序列化形式。以此提高性能。

### RabbitMQ 消息序列化配置 在 RabbitMQ 中,消息序列化通常通过 `RabbitTemplate` 的 `MessageConverter` 来实现。以下是关于如何在 RabbitMQ 中进行消息序列化的详细说明: #### 配置 MessageConverter 为了支持自定义的消息序列化和反序列化逻辑,在 Spring AMQP 提供的 `RabbitTemplate` 中可以设置不同的 `MessageConverter` 实现类。默认情况下,Spring 使用的是 `SimpleMessageConverter`,它能够处理简单的字符串、字节数组以及 Java 对象的转换。 如果需要更复杂的对象序列化功能,则可以选择其他类型的 `MessageConverter` 或者创建自己的实现。常见的选项包括: - **Jackson2JsonMessageConverter**: 将消息体作为 JSON 字符串发送并接收时自动解析为对应的 POJO 类型。 - **SerializableMessageConverter**: 支持基于 Java 序列化的二进制数据传输方式。 可以通过如下代码片段展示如何配置 Jackson2JsonMessageConverter[^2]: ```java import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { @Bean public Jackson2JsonMessageConverter jsonMessageConverter() { return new Jackson2JsonMessageConverter(); } } ``` 当设置了上述 Bean 后, 所有的消息都会被尝试以 JSON 形式编码解码. #### 安装与版本管理 对于特定版本的需求 (如 v3.10.11),可以从官方 GitHub 发布页面下载对应 tarball 文件来安装服务器端软件包[^3]: ```bash wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.10.11/rabbitmq-server-generic-unix-3.10.11.tar.xz tar xf rabbitmq-server-generic-unix-3.10.11.tar.xz cd rabbitmq_server-3.10.11/ sbin/rabbitmq-server & ``` 这一步骤确保本地环境运行的服务程序兼容客户端所使用的协议特性集。 --- #### 注意事项 - 如果生产环境中涉及高吞吐量或者敏感信息安全问题,请考虑启用 SSL/TLS 加密连接,并调整队列持久性和确认机制参数。 - 自定义序列化方案可能增加开发复杂度的同时也会影响性能表现;因此建议仅在必要时候采用非标准格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值