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转换器及其案例等内容,希望对大家有所帮助。

相关推荐
IT_陈寒16 分钟前
🔥3分钟掌握JavaScript性能优化:从V8引擎原理到5个实战提速技巧
前端·人工智能·后端
程序员清风1 小时前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
考虑考虑1 小时前
Java实现字节转bcd编码
java·后端·java ee
hong_zc1 小时前
rabbitmq 重试机制
rabbitmq
AAA修煤气灶刘哥2 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督2 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
星辰大海的精灵2 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师2 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥2 小时前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python
LSTM972 小时前
如何使用C#实现Excel和CSV互转:基于Spire.XLS for .NET的专业指南
后端