RabbitMQ入门指南(六):消息转换器及其案例

前言

RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ默认转换器、JSON转换器及其案例等内容。


一、消息转换器

消息转换器是一个用于将消息转换为特定格式或类型的组件。在分布式系统中,消息转换器通常用于在不同的系统或服务之间进行数据传输和交互。

在Spring框架中,当消息发送者将消息发送到RabbitMQ时,如果消息体被封装为一个Object,在数据传输过程中,这个Object会被序列化为字节流,然后发送给RabbitMQ。同样,当消息接收者从RabbitMQ接收消息时,字节流会被反序列化为Java对象。

然而,默认情况下,Spring使用的是Java的序列化方式(JDK序列化)来进行这种转换。JDK序列化虽然简单易用,但也存在一些问题:

  • 数据体积过大:JDK序列化生成的数据体积相对较大,这可能会影响传输效率和存储效率。
  • 有安全漏洞:JDK序列化可能存在一些安全漏洞,例如,攻击者可能通过序列化恶意对象来执行任意代码。
  • 可读性差:JDK序列化生成的字节流难以阅读和理解,这给调试和审计带来了困难。

为了解决这些问题,可以使用其他的序列化方式,例如JSON序列化等。

二、RabbitMQ默认转换器案例(省略交换机)

在consumer服务中声明队列:

typescript 复制代码
    @Bean
    public Queue objectQueue() {
        return new Queue("object.queue");
    }

在publisher服务中编写测试类,实现消息发送

typescript 复制代码
    @Test
    void testSendObject() {
        Map<String, Object> msg = new HashMap<>(2);
        msg.put("username", "user");
        msg.put("password", 123456);
        rabbitTemplate.convertAndSend("object.queue", msg);
    }

运行后在RabbitMQ管理控制台查看消息

三、JSON转换器案例(省略交换机)

1.配置JSON转换器

在publisher和consumer两个服务(父工程)中引入Jackson依赖

xml 复制代码
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

配置消息转换器(在publisher和consumer两个服务的启动类中添加一个Bean):

typescript 复制代码
    @Bean
    public MessageConverter jacksonMessageConvertor(){
        return new Jackson2JsonMessageConverter();
    }

2.运行结果

重启项目,运行测试类,并在RabbitMQ管理控制台查看消息:

在consumer服务中新建一个类实现消息接收

typescript 复制代码
    @RabbitListener(queues = "object.queue")
    public void listenObject(Map<String, Object> msg) throws InterruptedException {
        System.out.println("object.queue:" + msg);
    }

重启项目查看结果


总结

RabbitMQ是一个开源的消息队列软件,旨在提供可靠的消息传递和消息队列功能。本文主要介绍了RabbitMQ默认转换器、JSON转换器及其案例等内容,希望对大家有所帮助。

相关推荐
Tech Synapse41 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
.生产的驴42 分钟前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
微信-since811921 小时前
[ruby on rails] 安装docker
后端·docker·ruby on rails
代码吐槽菌3 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫3 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_3 小时前
第一章 Go语言简介
开发语言·后端·golang
BestandW1shEs3 小时前
彻底理解消息队列的作用及如何选择
java·kafka·rabbitmq·rocketmq
码蜂窝编程官方3 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm4 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊4 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程