RabbitAdmin 基礎(chǔ)概念詳解與配置
1. 前言
Hello,大家好。本小節(jié)作為第三章-Spring 生態(tài)鏈與 RabbitMQ 整合的開篇,會(huì)為同學(xué)們介紹,在 Spring 生態(tài)鏈中,RabbitMQ 是如何與 Spring 進(jìn)行整合的,包括從最初的在 Spring 中初始化 RabbitMQ 、以及如何在 Spring 中使用 RabbitMQ 發(fā)送消息,以及后續(xù)在 Spring 中如何對(duì)消息進(jìn)行監(jiān)聽等基礎(chǔ)核心內(nèi)容。
本小節(jié)首先會(huì)為各位同學(xué)們介紹,如何在 Spring 中初始化 RabbitMQ 。包括初始化 RabbitMQ 所使用的 Spring 組件,以及該組件的基本使用方法,快速助力同學(xué)們將 RabbitMQ 與 Spring 進(jìn)行整合。
本節(jié)主要內(nèi)容:
-
RabbitAdmin 基礎(chǔ)概念概述;
-
RabbitAdmin 基礎(chǔ)配置概述。
2. RabbitAdmin 基礎(chǔ)概念概述
基礎(chǔ)概念:
在 Spring 中,我們首先會(huì)接觸到 RabbitAdmin 。我們都知道,RabbitMQ 是基于 AMQP 協(xié)議和 erlang 語言進(jìn)行編碼開發(fā)的,所以,在 Spring 中我們無法直接使用 RabbitMQ ,Spring 團(tuán)隊(duì)考慮到了這一點(diǎn),所以做了一種名為 Spring-AMQP 的中間層依賴,我們可以把這個(gè)依賴?yán)斫獬晌覀儜?yīng)用程序中的 Mapper 層,即數(shù)據(jù)庫與實(shí)體間的映射關(guān)系。
Spring-AMQP 中間層依賴規(guī)定了一種映射關(guān)系,這種映射關(guān)系可以直接把 RabbitMQ 中的各種元素與 Java 程序相對(duì)應(yīng),我們只需要通過像編寫普通 Java 程序那樣即可在 Spring 中使用 RabbitMQ 了。
RabbitAdmin 是 Spring-AMQP 中的核心基礎(chǔ)組件,是我們?cè)?Spring 中對(duì) RabbitMQ 進(jìn)行初始化的必須組件, 其提供了 RabbitMQ 中聲明交換機(jī)、聲明隊(duì)列、綁定交換機(jī)和隊(duì)列,以及綁定路由 Key 等其他 API ,RabbitAdmin 正式由此得名。
在介紹完 RabbitAdmin 基礎(chǔ)概念之后,下面讓我們來看一下如何對(duì) RabbitAdmin 進(jìn)行配置吧。
3. RabbitAdmin 基礎(chǔ)配置概述
在對(duì) RabbitAdmin 配置進(jìn)行介紹之前,我們需要先引入 RabbitAdmin 的依賴包。RabbitAdmin 的依賴包共有兩個(gè),接下來依次進(jìn)行介紹。
3.1 引入 RabbitAdmin
以 Maven 引入方式為例,引入代碼如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
上述依賴是 SpringBoot 的 Starter 中封裝好的 amqp 依賴,也是 Spring 與 RabbitMQ 進(jìn)行整合的基礎(chǔ)依賴。
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.5</version>
</dependency>
上述依賴是 RabbitMQ 的客戶端依賴,即 amqp-client ,我們都知道 RabbitMQ 分為 Server 端和 Client 端,其中,Server 端正是我們所啟動(dòng)的 RabbitMQ Server 服務(wù),客戶端就是我們所有使用 RabbitMQ 的應(yīng)用程序。
本依賴正是 RabbitMQ 的 Client 端,如果我們想在應(yīng)用程序中使用 RabbitMQ ,那么這個(gè)依賴是必須的。
3.2 RabbitAdmin 基礎(chǔ)配置
在我們的應(yīng)用程序中引入相應(yīng)的 RabbitMQ 依賴之后,接下來我們需要在應(yīng)用程序中對(duì) RabbitMQ 進(jìn)行初始化,而進(jìn)行初始化的 Spring 組件就是我們的 RabbitAdmin 。
初始化 RabbitMQ 客戶端連接
初始化 RabbitMQ 客戶端連接的代碼如下所示:
代碼實(shí)現(xiàn):
@Bean
public ConnectionFactory connectionFactory () {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setAddresses("82.156.65.57:5672");
cachingConnectionFactory.setUsername("guest");
cachingConnectionFactory.setPassword("guest");
cachingConnectionFactory.setVirtualHost("/");
return cachingConnectionFactory;
}
代碼解釋:
第 1 行,我們使用 Spring 的 Bean 注解將我們聲明的 connectionFactory 方法注入到 Spring 容器中。
第 2 行,我們使用 Spring-AMQP 中的 ConnectionFactory 類,來聲明了一個(gè)名為 connectionFactory 的連接工廠方法,用于對(duì) RabbitMQ 進(jìn)行初始化。
第 3 行,我們實(shí)例化了一個(gè) cachingConnectionFactory 實(shí)例,該實(shí)例是 Spring-AMQP 中對(duì) RabbitMQ 連接信息進(jìn)行初始化的基礎(chǔ)實(shí)例,所有的 RabbitMQ 連接信息均來源于該實(shí)例。
第 4-7 行,我們通過 cachingConnectionFactory 實(shí)例的 setAddresses 、setUsername 、setPassword 、setVirtualHost 方法來分別初始化 RabbitMQ Server 的服務(wù)地址、用戶名、密碼、虛擬主機(jī)。
第 8 行,我們將填充好的 cachingConnectionFactory 實(shí)例進(jìn)行返回,以初始化完成 RabbitMQ 客戶端連接。
通過上述代碼的配置,我們已經(jīng)初始化了 RabbitMQ 的客戶端連接,接下來我們需要繼續(xù)初始化 RabbitAdmin ,以在 Spring 中管理 RabbitMQ 。
初始化 RabbitAdmin 的方法如下代碼所示:
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
代碼解釋:
第 2 行,我們 RabbitAdmin 類來聲明了一個(gè)名為 rabbitAdmin 的方法,用來初始化 RabbitAdmin 。
第 4-6 行,我們首先根據(jù)上述的 connectionFactory 來實(shí)例化了一個(gè) RabbitAdmin 實(shí)例;然后通過 rabbitAdmin 實(shí)例的 setAutoStartup 方法置位 true 來設(shè)置 RabbitAdmin 的自動(dòng)啟動(dòng);最后,我們將設(shè)置好的 rabbitAdmin 實(shí)例進(jìn)行返回,以使用 RabbitAdmin 。
Tips: 1. @Bean 注解是 Spring 容器中自帶的注解,其作用就是將我們應(yīng)用程序中的類,或者方法來注入到 Spring 容器中,作為 Spring 配置的一部分。
2. 當(dāng)我們?cè)O(shè)置好了 connectionFactory 和 rabbitAdmin 組件之后,一旦啟動(dòng)我們的應(yīng)用程序,這兩個(gè)組件就會(huì)自動(dòng)進(jìn)行初始化。
RabbitAdmin 核心 API 介紹
下面我們來看一下在 RabbitAdmin 中,都有哪些核心的 API 。
declareExchange() 聲明交換機(jī)的方法;
declareQueue() 聲明隊(duì)列的方法;
declareBinding() 將交換機(jī)與隊(duì)列進(jìn)行綁定的方法;
purgeQueue() 清空指定隊(duì)列中所有的消息的方法。
在 RabbitAdmin 中,我們可以通過實(shí)例化對(duì)象的方法,來創(chuàng)建一個(gè)交換機(jī),或者一個(gè)隊(duì)列,像下面這樣:
new DirectExchange("test.direct", false, false)
new Queue("test.direct.queue", false)
在上述 new DirectExchange 方法中,第一個(gè)參數(shù)表示交換機(jī)的名稱;第二個(gè)參數(shù)表示是否持久化;第三個(gè)參數(shù)表示是否自動(dòng)刪除。
在上述 new Queue 方法中,第一個(gè)參數(shù)表示隊(duì)列的名稱;第二個(gè)參數(shù)表示是否持久化。
Tips: 這兩個(gè)方法在 RabbitAdmin 中使用頻率很高,同學(xué)們注意。
那么,我們應(yīng)該如何使用 RabbitAdmin 這些核心的 API 呢,如下代碼所示:
@Autowired
private RabbitAdmin rabbitAdmin;
rabbitAdmin.declareExchange(new DirectExchange("test.direct", false, false));
rabbitAdmin.declareQueue(new Queue("test.direct.queue", false));
rabbitAdmin.declareBinding(new Binding("test.direct.queue", Binding.DestinationType.QUEUE,
"test.direct", "direct", new HashMap<>()));
代碼解釋:
第 1-2 行,我們使用 Autowired 注解,來講 RabbitAdmin 注入進(jìn)來,并用一個(gè)私有變量 rabbitAdmin 來接收。
第 3 行,我們使用 declareExchange 方法來聲明了一個(gè)名為 test.direct 的交換機(jī)。
第 4 行,我們使用 declareQueue 方法來聲明了一個(gè)名為 test.direct.queue 的隊(duì)列。
第 5 行,我們使用 declareBinding 方法來將我們聲明的交換機(jī)和消息隊(duì)列進(jìn)行綁定,其中,test.direct.queue 為我們聲明的隊(duì)列;Binding.DestinationType.QUEUE 為綁定的類型;test.direct 為我們聲明的交換機(jī);direct 為我們要綁定的交換機(jī)的類型;new HashMap<>() 表示隊(duì)列的最后一個(gè) arguments 屬性,其屬性是 Map 類型,這里置為了空。
我們可以通過這些核心的 API 來聲明 RabbitMQ 中最基礎(chǔ)的元素,包括交換機(jī)、消息隊(duì)列、路由 Key ,以及綁定規(guī)則。
Tips: 1. Binding.DestinationType 這種類型,除了 QUEUE 隊(duì)列類型,還有一個(gè) EXCHANGE 類型,同學(xué)們可以課下進(jìn)行了解;
2. 了解 RabbitAdmin 的基礎(chǔ)概念和基礎(chǔ)配置,是 RabbitMQ 整合 Spring 基礎(chǔ)中的基礎(chǔ),同學(xué)們要了解每個(gè)基礎(chǔ)概念和核心 API 。
4. 小結(jié)

本小節(jié)為同學(xué)們介紹了在 Spring 生態(tài)中,如何集成 RabbitMQ 。從介紹 RabbitAdmin 基礎(chǔ)概念開始,到引入 RabbitAdmin 依賴,最后到 RabbitAdmin 基礎(chǔ)配置介紹結(jié)束,詳細(xì)介紹了如何在 Spring 中,初始化 RabbitMQ 、聲明交換機(jī)、聲明消息隊(duì)列,以及建立綁定關(guān)系等,旨在幫助同學(xué)們可以清楚地入門 RabbitAdmin ,我們只有在優(yōu)先掌握了 RabbitAdmin 之后,才可以在 Spring 中進(jìn)行后續(xù)操作,同學(xué)們加油。