文章目录
- 一,Spring整合RabbittMq的步骤
- 二,AmqpAdmin使用
- 1. `createExchange()`
- 2. `testCreateQueue()`
- 3. `createBinding()`
- 4,发送消息
这一部分讲解Spring整合RabbitMq的步骤及其使用,包括:
- 255-商城业务-消息队列-SpringBoot整合RabbitMQ
- 256-商城业务-消息队列-AmqpAdmin使用
- 257-商城业务-消息队列-RabbitTemplate使用
一,Spring整合RabbittMq的步骤
以下是基于这些信息的Spring整合RabbitMQ的步骤:
- 引入amqp场景:为了使用RabbitMQ,首先需要在项目中引入AMQP相关的依赖。如果你正在使用Maven或Gradle作为构建工具,你需要添加相应的RabbitMQ客户端库和Spring AMQP库到你的pom.xml(对于Maven)文件。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
-
自动配置:当引入了AMQP场景后,Spring Boot会自动加载
RabbitAutoConfiguration
类进行自动配置。这个过程将为容器创建以下组件:RabbitTemplate
:用于发送消息到RabbitMQ。AmqpAdmin
:提供了一些管理功能,如创建队列、交换机等。CachingConnectionFactory
:连接工厂,负责建立与RabbitMQ服务器的连接,并缓存它们以提高性能。RabbitMessagingTemplate
:提供了更高级的消息发送功能。
-
属性配置:所有的属性都通过
@ConfigurationProperties(prefix = "spring.rabbitmq")
注解进行配置。这意味着你可以通过在application.properties或application.yml文件中定义spring.rabbitmq.*
前缀的属性来设置RabbitMQ的相关参数。spring: rabbitmq: host: 192.168.56.10 port: 5672 virtual-host: /
-
启用RabbitMQ支持:使用
@EnableRabbit
注解,把注解加载启动类上。
@EnableRabbit
二,AmqpAdmin使用
我们通过单元测试来试用RabbitmMq的Java客户端。
这三个方法都是测试方法,分别用于创建交换机、队列以及绑定关系。下面是每个方法的具体作用:
1. createExchange()
@Test
public void createExchange() {
Exchange directExchange = new DirectExchange("hello-java-exchange", true, false);
amqpAdmin.declareExchange(directExchange);
log.info("Exchange[{}]创建成功:", "hello-java-exchange");
}
- 作用: 创建一个名为
hello-java-exchange
的Direct类型的交换机。 - 细节:
new DirectExchange("hello-java-exchange", true, false)
创建了一个Direct类型的交换机实例,其中"hello-java-exchange"
是交换机的名称,true
表示它是持久化的(即使RabbitMQ重启后也不会丢失),false
表示它不是自动删除的(即不会在最后一个绑定到它的队列被删除后自动删除)。amqpAdmin.declareExchange(directExchange)
使用AmqpAdmin
实例的declareExchange
方法来声明(创建)交换机。log.info("Exchange[{}]创建成功:", "hello-java-exchange")
记录一条信息,表示交换机创建成功。
2. testCreateQueue()
@Test
public void testCreateQueue() {
Queue queue = new Queue("hello-java-queue", true, false, false);
amqpAdmin.declareQueue(queue);
log.info("Queue[{}]创建成功:", "hello-java-queue");
}
- 作用: 创建一个名为
hello-java-queue
的队列。 - 细节:
new Queue("hello-java-queue", true, false, false)
创建了一个队列实例,其中"hello-java-queue"
是队列的名称,true
表示它是持久化的,第一个false
表示它不是独占的(独占队列只能被创建它的连接访问),第二个false
表示它不是自动删除的(即不会在消费者断开连接后自动删除)。amqpAdmin.declareQueue(queue)
使用AmqpAdmin
实例的declareQueue
方法来声明(创建)队列。log.info("Queue[{}]创建成功:", "hello-java-queue")
记录一条信息,表示队列创建成功。
3. createBinding()
@Test
public void createBinding() {
Binding binding = new Binding("hello-java-queue",
Binding.DestinationType.QUEUE,
"hello-java-exchange",
"hello.java",
null);
amqpAdmin.declareBinding(binding);
log.info("Binding[{}]创建成功:", "hello-java-binding");
}
- 作用: 创建一个绑定关系,将队列
hello-java-queue
绑定到交换机hello-java-exchange
上。 - 细节:
new Binding("hello-java-queue", Binding.DestinationType.QUEUE, "hello-java-exchange", "hello.java", null)
创建了一个绑定实例,指定了队列"hello-java-queue"
作为目的地类型 (Binding.DestinationType.QUEUE
),交换机"hello-java-exchange"
作为来源,路由键"hello.java"
,以及没有额外的绑定参数。amqpAdmin.declareBinding(binding)
使用AmqpAdmin
实例的declareBinding
方法来声明(创建)绑定。log.info("Binding[{}]创建成功:", "hello-java-binding")
记录一条信息,表示绑定创建成功。
4,发送消息
这段代码通过RabbitMQ发送一个消息。
-
创建消息实体:
OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity(); reasonEntity.setId(1L); reasonEntity.setCreateTime(new Date()); reasonEntity.setName("reason"); reasonEntity.setStatus(1); reasonEntity.setSort(2);
- 这几行代码创建了一个
OrderReturnReasonEntity
类型的对象,并设置了它的属性。这个对象将作为消息发送到RabbitMQ。
- 这几行代码创建了一个
-
发送消息:
rabbitTemplate.convertAndSend("hello-java-exchange", "hello2.java",
reasonEntity, new CorrelationData(UUID.randomUUID().toString()));
-
rabbitTemplate
是一个实现了RabbitTemplate
接口的对象,通常由Spring框架自动配置。 -
convertAndSend
方法用于发送消息。它有四个参数:"hello-java-exchange"
是交换机的名称。"hello2.java"
是路由键(routing key)。reasonEntity
是要发送的消息体。new CorrelationData(UUID.randomUUID().toString())
是一个关联数据(CorrelationData
),用于跟踪消息的状态。这里使用UUID生成了一个唯一标识符。
-
在发送消息之前,
rabbitTemplate
会自动将reasonEntity
对象转换为字节流,通常使用JSON序列化的方式。因此,reasonEntity
必须实现Serializable
接口或者能够被序列化工具如 Jackson 或 Gson 处理。