消息轉(zhuǎn)換器概念講解與基本屬性介紹
1. 前言
Hello,大家好。本小節(jié)會(huì)為同學(xué)們介紹 RabbitMQ 在 Spring 生態(tài)中的消息轉(zhuǎn)換器,消息轉(zhuǎn)換器是 RabbitMQ 在 Spring 生態(tài)中的又一核心元素,是對(duì)消息適配器的補(bǔ)充,通過配合消息適配器的使用,可以實(shí)現(xiàn)針對(duì)不同的消息接收格式進(jìn)行處理,以滿足不同業(yè)務(wù)場(chǎng)景的需要。
本節(jié)主要內(nèi)容:
-
消息轉(zhuǎn)換器基礎(chǔ)概念概述;
-
消息轉(zhuǎn)換器基礎(chǔ)配置介紹。
2. 消息轉(zhuǎn)換器基礎(chǔ)概念概述
基礎(chǔ)概念:
我們?cè)谏弦恍」?jié)中,已經(jīng)對(duì)消息適配器有了一個(gè)基礎(chǔ)的認(rèn)識(shí),去并且在介紹消息適配器的同時(shí),也引入了消息轉(zhuǎn)換器,就是代碼中的 MessageConverter 類。
在經(jīng)過上節(jié)消息適配器代碼的實(shí)操之后,相信大家對(duì)消息轉(zhuǎn)換器的感念已經(jīng)不是那么陌生了,想必在各位同學(xué)的心里,已經(jīng)對(duì)消息轉(zhuǎn)換器有一個(gè)初步的認(rèn)知了。
同樣地,在介紹什么是消息轉(zhuǎn)換器時(shí),還是和消息適配器那樣,將消息和轉(zhuǎn)換器兩個(gè)概念拆開來介紹,但是,消息這一名詞已經(jīng)在消息適配器小節(jié)中做了介紹,這里不再贅述,我們直接從轉(zhuǎn)換器開始。
我們先拋開計(jì)算機(jī)這一專業(yè)領(lǐng)域來說,在我們的日常生活中,轉(zhuǎn)換器的例子隨處可見,這里我們還拿在上節(jié)中提到的筆記本電腦的例子繼續(xù)介紹。
我們都知道,隨著筆記本電腦行業(yè)的飛速發(fā)展,筆記本的功能也是越來越強(qiáng)大,那么,筆記本電腦提供給我的接入端口也在發(fā)生著強(qiáng)大的變化,傳統(tǒng)的 USB 端口在最新的筆記本電腦中甚至已經(jīng)看不見了,越來越多的則是 Type-C 或 Light 形式的接入端口。
試想一下,如果我們需要使用移動(dòng)硬盤來連接電腦,進(jìn)行工作數(shù)據(jù)的處理,移動(dòng)硬盤只有一個(gè)普通的 USB 端口,但是我們的筆記本電腦只有一個(gè) Type-C 的接入端口,那么此時(shí)我們又應(yīng)該如何將移動(dòng)硬盤來連接電腦呢。這種情況,我們就需要一條轉(zhuǎn)接線來發(fā)揮作用了。
就上述例子而言,轉(zhuǎn)接線提供了一種在移動(dòng)硬盤和筆記本電腦之間,由于接入端口的不同,移動(dòng)硬盤和筆記本電腦可以進(jìn)行接入的橋梁。轉(zhuǎn)接線的一端連接電腦的 Type-C 端口,另一端則通過 USB 端口的形式連接移動(dòng)硬盤,以達(dá)到不同的端口之間移動(dòng)硬盤可以繼續(xù)連接筆記本電腦的目的。而這一轉(zhuǎn)接線在移動(dòng)硬盤和筆記本電腦之間就發(fā)揮了轉(zhuǎn)換器的作用。
說白了,轉(zhuǎn)換器其實(shí)就是為了在兩種不同的物品之間,通過一定的媒介,使這兩種不同的物品可以繼續(xù)進(jìn)行互聯(lián)互通的一種技術(shù)手段,而這種技術(shù)手段可以是技術(shù)實(shí)物(比如轉(zhuǎn)換線),也可以是一種可以在空氣中進(jìn)行傳播的介質(zhì)(Wifi投屏)。
消息轉(zhuǎn)換器亦是如此,在 Spring-AMQP 中,消息適配器指的就是,將我們接收的消息進(jìn)行不同格式的轉(zhuǎn)換,從而可以解決數(shù)據(jù)在不同業(yè)務(wù)場(chǎng)景下所需要的格式的不同的問題,即 RabbitMQ 中的消息轉(zhuǎn)換器就是將 RabbitMQ 中的消息進(jìn)行不同格式的轉(zhuǎn)換。
在介紹完消息轉(zhuǎn)換器的基礎(chǔ)概念之后,下面讓我們來看一下如何對(duì)消息轉(zhuǎn)換器進(jìn)行簡(jiǎn)單的配置吧。
3. 消息轉(zhuǎn)換器基礎(chǔ)配置介紹
還是像上節(jié)小節(jié)一樣,要想在 Spring 中使用消息轉(zhuǎn)換器,需要將 Spring-AMQP 和 AMQP-Stater 的依賴先引入進(jìn)來,方便起見,同學(xué)們可以直接拷貝下放代碼:
3.1 引入消息轉(zhuǎn)換器
以 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>
在將這兩個(gè)依賴進(jìn)行引入之后,我們就可以對(duì)消息轉(zhuǎn)換器進(jìn)行配置了。
3.2 初始化消息轉(zhuǎn)換器
在 Spring-AMQP 中,存在很多不同類型的消息轉(zhuǎn)換器,我們需要根據(jù)我們不同的業(yè)務(wù)需求,來選擇使用哪種類型的消息轉(zhuǎn)換器,當(dāng)然,如果 RabbitMQ 提供的消息轉(zhuǎn)換器不能夠滿足我們的業(yè)務(wù)需求,我們也可以自定義消息轉(zhuǎn)換器。
本部分會(huì)以 Jackson2JsonMessageConverter 消息轉(zhuǎn)換器來介紹,在使用消息轉(zhuǎn)換器前的準(zhǔn)備工作,并在下一小節(jié)中對(duì)常用類型的消息轉(zhuǎn)換器進(jìn)行代碼實(shí)操。
初始化 Jackson2JsonMessageConverter 消息轉(zhuǎn)換器
像 RabbitAdmin 和 RabbitTemplate 一樣,要想使用消息轉(zhuǎn)換器,需要先對(duì)消息轉(zhuǎn)換器進(jìn)行初始化,這個(gè)初始化過程非常簡(jiǎn)單,初始化 Jackson2JsonMessageConverter 消息轉(zhuǎn)換器的代碼如下所示:
代碼實(shí)現(xiàn):
// 省略連接 RabbitMQ-Server 的步驟
Jackson2JsonMessageConverter jsonConverter = new Jackson2JsonMessageConverter();
代碼解釋:
1-2 行,我們使用了 new Jackson2JsonMessageConverter 的方式,來對(duì) Jackson2JsonMessageConverter 消息轉(zhuǎn)換器進(jìn)行實(shí)例化,在實(shí)例化的同時(shí),我們調(diào)用了 Jackson2JsonMessageConverter 消息轉(zhuǎn)換器通用的構(gòu)造方法,來初始化了 Jackson2JsonMessageConverter 消息轉(zhuǎn)換器。
在我們使用消息轉(zhuǎn)換器時(shí),通常來講,我們并不需要向消息轉(zhuǎn)換器中傳遞任何參數(shù),我們只需要在我們的消息適配器的實(shí)現(xiàn)中,聲明好消息轉(zhuǎn)換器所需的轉(zhuǎn)換格式即可。
通過上述兩行代碼,我們就完成了 Jackson2JsonMessageConverter Jackson2JsonMessageConverter 消息轉(zhuǎn)換器中的屬性或方法。
Tips: 消息轉(zhuǎn)換器需要配合消息適配器來同時(shí)使用才行,消息轉(zhuǎn)換器不能單獨(dú)使用,但是,消息適配器可以單獨(dú)使用,可以不在消息適配器中配置消息轉(zhuǎn)換器。
4. 小結(jié)

本小節(jié)通過日常生活中的一個(gè)例子,為同學(xué)們?cè)敿?xì)介紹了消息轉(zhuǎn)換器這一概念,包括什么是轉(zhuǎn)換器,以及最后的什么是 RabbitMQ 消息轉(zhuǎn)換器這一概念。在介紹完相關(guān)概念之后,又以 Jackson2JsonMessageConverter 消息轉(zhuǎn)換器為例,為同學(xué)們概述了 RabbitMQ 中消息轉(zhuǎn)換器的基礎(chǔ)使用,以及初始化方法。
通過基礎(chǔ)概念與基礎(chǔ)使用相結(jié)合的方式,旨在希望同學(xué)們可以通過本節(jié)的學(xué)習(xí)對(duì) RabbitMQ 中的消息轉(zhuǎn)換器這一概念有一個(gè)簡(jiǎn)單清楚的認(rèn)識(shí),以及了解一些消息轉(zhuǎn)換器的基礎(chǔ)使用方法,這樣我們?cè)谙鹿?jié)才會(huì)很好地掌握消息轉(zhuǎn)換器中的使用。