2.RabbitMQ
这节演示RabbitMQ
支持的AMQP协议,理解AMQP需要了解下面三个概念:
当发布者发送的消息和消息的routing key到RabbitMQ中间件时:
- exchange:基于消息的routing key,将消息路由到一个或多个的queue;
- binding: binding是设置queue绑定到exchange的连接;
- queue:消息队列
exchange主要有下面的类型:
- Default:将消息路由到名称为routing key的queue,所有的queue都会自动绑定到default exchange;
- Direct:将消息路由到binding key与消息的routing key一致的queue;
- Fanout:将消息路由到所有绑定的queue,不考虑binding key和routing key;
- Topic:将消息路由到binding key匹配routing key的一个或多个queue,匹配可包含通配符;
- Headers:类似于topic,但路由基于消息头而不是routing key。
2.1 安装RabbitMQ
使用docker compose安装RabbitMQ。
stack.yml
version: '3.1'
services:
rabbitmq:
image: rabbitmq:management
restart: always
ports:
- "5672:5672" # 连接端口
- "15672:15672" # 管理控制台端口
environment:
RABBITMQ_DEFAULT_USER: wisely
RABBITMQ_DEFAULT_PASS: zzzzzz
执行命令:
$ docker-compose -f stack.yml up -d
2.2 新建应用
新建应用,信息如下:
Group:top.wisely
Artifact:learning-amqp
Dependencies:Spring for RabbitMQ
、Lombok
build.gradle
文件中的依赖如下:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-amqp'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//...
}
2.3 Spring Boot的自动配置
Spring Boot的自动配置有:
RabbitAutoConfiguration
:- 配置连接RabbitMQ的
rabbitConnectionFactory
的Bean; - 配置用来操作消息的
rabbitTemplate
的Bean; - 通过
@EnableRabbit
注解开启RabbitMQ的支持。
- 配置连接RabbitMQ的
通过RabbitProperties
使用spring.rabbitmq.*
对RabbitMQ进行配置。
2.4 示例
-
连接RabbitMQ
spring: rabbitmq: host: localhost port: 5672 username: wisely password: zzzzzz
-
消息定义
@Data @AllArgsConstructor @NoArgsConstructor public class MessageEvent implements Serializable { private String id; private String name; }
-
配置
@SpringBootApplication @EnableScheduling //1 public class LearningAmqpApplication { public static void main(String[] args) { SpringApplication.run(LearningAmqpApplication.class, args); } @Bean Queue myDest(){ //2 return new Queue("my-dest"); } @Bean Queue confirmDest(){ //3 return new