消息轉換器概念講解與基本屬性介紹
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 中的消息轉換器這一概念有一個簡單清楚的認識,以及了解一些消息轉換器的基礎使用方法,這樣我們在下節才會很好地掌握消息轉換器中的使用。