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

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