跳到主要内容

消息转换器概念讲解与基本属性介绍

1. 前言

Hello,大家好。本小节会为同学们介绍 RabbitMQ 在 Spring 生态中的消息转换器,消息转换器是 RabbitMQ 在 Spring 生态中的又一核心元素,是对消息适配器的补充,通过配合消息适配器的使用,可以实现针对不同的消息接收格式进行处理,以满足不同业务场景的需要。

本节主要内容:

  • 消息转换器基础概念概述;
  • 消息转换器基础配置介绍。

2. 消息转换器基础概念概述

基础概念:

我们在上一小节中,已经对消息适配器有了一个基础的认识,去并且在介绍消息适配器的同时,也引入了消息转换器,就是代码中的 MessageConverter 类。

在经过上节消息适配器代码的实操之后,相信大家对消息转换器的感念已经不是那么陌生了,想必在各位同学的心里,已经对消息转换器有一个初步的认知了。

同样地,在介绍什么是消息转换器时,还是和消息适配器那样,将消息和转换器两个概念拆开来介绍,但是,消息这一名词已经在消息适配器小节中做了介绍,这里不再赘述,我们直接从转换器开始。

我们先抛开计算机这一专业领域来说,在我们的日常生活中,转换器的例子随处可见,这里我们还拿在上节中提到的笔记本电脑的例子继续介绍。

我们都知道,随着笔记本电脑行业的飞速发展,笔记本的功能也是越来越强大,那么,笔记本电脑提供给我的接入端口也在发生着强大的变化,传统的 USB 端口在最新的笔记本电脑中甚至已经看不见了,越来越多的则是 Type-C 或 Light 形式的接入端口。

试想一下,如果我们需要使用移动硬盘来连接电脑,进行工作数据的处理,移动硬盘只有一个普通的 USB 端口,但是我们的笔记本电脑只有一个 Type-C 的接入端口,那么此时我们又应该如何将移动硬盘来连接电脑呢。这种情况,我们就需要一条转接线来发挥作用了。

就上述例子而言,转接线提供了一种在移动硬盘和笔记本电脑之间,由于接入端口的不同,移动硬盘和笔记本电脑可以进行接入的桥梁。转接线的一端连接电脑的 Type-C 端口,另一端则通过 USB 端口的形式连接移动硬盘,以达到不同的端口之间移动硬盘可以继续连接笔记本电脑的目的。而这一转接线在移动硬盘和笔记本电脑之间就发挥了转换器的作用。

说白了,转换器其实就是为了在两种不同的物品之间,通过一定的媒介,使这两种不同的物品可以继续进行互联互通的一种技术手段,而这种技术手段可以是技术实物(比如转换线),也可以是一种可以在空气中进行传播的介质(Wifi投屏)。

消息转换器亦是如此,在 Spring-AMQP 中,消息适配器指的就是,将我们接收的消息进行不同格式的转换,从而可以解决数据在不同业务场景下所需要的格式的不同的问题,即 RabbitMQ 中的消息转换器就是将 RabbitMQ 中的消息进行不同格式的转换。

在介绍完消息转换器的基础概念之后,下面让我们来看一下如何对消息转换器进行简单的配置吧。

3. 消息转换器基础配置介绍

还是像上节小节一样,要想在 Spring 中使用消息转换器,需要将 Spring-AMQP 和 AMQP-Stater 的依赖先引入进来,方便起见,同学们可以直接拷贝下放代码:

3.1 引入消息转换器

以 Maven 引入方式为例,引入代码如下所示:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.5</version>
</dependency>

在将这两个依赖进行引入之后,我们就可以对消息转换器进行配置了。

3.2 初始化消息转换器

在 Spring-AMQP 中,存在很多不同类型的消息转换器,我们需要根据我们不同的业务需求,来选择使用哪种类型的消息转换器,当然,如果 RabbitMQ 提供的消息转换器不能够满足我们的业务需求,我们也可以自定义消息转换器。

本部分会以 Jackson2JsonMessageConverter 消息转换器来介绍,在使用消息转换器前的准备工作,并在下一小节中对常用类型的消息转换器进行代码实操。

初始化 Jackson2JsonMessageConverter 消息转换器

像 RabbitAdmin 和 RabbitTemplate 一样,要想使用消息转换器,需要先对消息转换器进行初始化,这个初始化过程非常简单,初始化 Jackson2JsonMessageConverter 消息转换器的代码如下所示:

代码实现:

// 省略连接 RabbitMQ-Server 的步骤
Jackson2JsonMessageConverter jsonConverter = new Jackson2JsonMessageConverter();

代码解释:

1-2 行,我们使用了 new Jackson2JsonMessageConverter 的方式,来对 Jackson2JsonMessageConverter 消息转换器进行实例化,在实例化的同时,我们调用了 Jackson2JsonMessageConverter 消息转换器通用的构造方法,来初始化了 Jackson2JsonMessageConverter 消息转换器。

在我们使用消息转换器时,通常来讲,我们并不需要向消息转换器中传递任何参数,我们只需要在我们的消息适配器的实现中,声明好消息转换器所需的转换格式即可。

通过上述两行代码,我们就完成了 Jackson2JsonMessageConverter Jackson2JsonMessageConverter 消息转换器中的属性或方法。

Tips: 消息转换器需要配合消息适配器来同时使用才行,消息转换器不能单独使用,但是,消息适配器可以单独使用,可以不在消息适配器中配置消息转换器。

4. 小结

本小节通过日常生活中的一个例子,为同学们详细介绍了消息转换器这一概念,包括什么是转换器,以及最后的什么是 RabbitMQ 消息转换器这一概念。在介绍完相关概念之后,又以 Jackson2JsonMessageConverter 消息转换器为例,为同学们概述了 RabbitMQ 中消息转换器的基础使用,以及初始化方法。

通过基础概念与基础使用相结合的方式,旨在希望同学们可以通过本节的学习对 RabbitMQ 中的消息转换器这一概念有一个简单清楚的认识,以及了解一些消息转换器的基础使用方法,这样我们在下节才会很好地掌握消息转换器中的使用。