(踩坑篇)rabbitmq不同模块序列化和反序列化

本文详细解释了序列化和反序列化的基本概念,以及在RabbitMQ中的具体应用,介绍了如何使用Jackson2JsonMessageConverter进行消息序列化和反序列化。文章还分享了在实际开发中遇到的关于类加载和反射的问题,以及解决方法——确保类的全限定名正确和公共类的正确组织。

什么是序列化和反序列化

序列化(Serialization)和反序列化(Deserialization)是将对象转换为字节流或将字节流转换为对象的过程。

序列化是指将对象转换为字节流的过程。在序列化时,对象的状态信息(例如属性值、字段值等)被转换为一串字节,以便能够在网络上传输或者保存到磁盘上。序列化可以将对象持久化,并且使其能够在不同的环境中进行传输和恢复。序列化通常用于分布式系统、缓存、消息队列等场景。

反序列化是指将字节流恢复为对象的过程。在反序列化时,字节流被解析并还原为对应的对象,使其可以在内存中重新使用。反序列化是序列化的逆过程,通过反序列化,我们可以重新获得序列化之前的对象实例及其状态信息。

序列化和反序列化的主要目的是实现对象的持久化和跨网络传输。通过序列化和反序列化,我们可以将对象转换为字节流,然后在需要的时候重新恢复成对象,使得对象的状态可以被保存和传输。

rabbitmq中的序列化和反序列化

在 RabbitMQ 中,消息的序列化和反序列化是指将消息体转换为字节流以便发送到 RabbitMQ 服务器,并且在接收消息时将字节流还原为消息体的过程。

通常情况下,当你向 RabbitMQ 发送消息时,消息体需要被序列化成字节流。RabbitMQ 不会直接处理对象,而是处理字节流。因此,在发送消息之前,你需要将消息体序列化为字节流。同样地,当消费者从 RabbitMQ 接收消息时,需要将接收到的字节流反序列化为原始的消息体对象。

在 RabbitMQ 中,最常见的消息序列化方式是将消息体序列化为 JSON 或者其他类似的格式。在生产者端,你可以将对象转换为 JSON 字符串并将其作为消息体发送到 RabbitMQ;在消费者端,你可以从接收到的 JSON 字符串中解析出对象。

实现

RabbitMQ 提供了 Jackson2JsonMessageConverter 来支持消息内容 JSON 序列化与反序列化
消息发送者在发送消息时应设置 MessageConverter 为 Jackson2JsonMessageConverter
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());

 消费者

package com.example.user.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;

import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值