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 中进行后续操作,同学们加油。