Spring AMQP核心类汇总
Spring AMQP核心类讲解
一、总览图表
类名 | 功能 | 场景 |
---|---|---|
AmqpAdmin | 资源管理 | 动态声明队列和交换机。 |
RabbitTemplate | 消息生产者 | 发送消息 |
SimpleRabbitListenerEndpoint | 定义监听细节,支持动态配置 | 定义实际消费者的业务逻辑 |
SimpleRabbitListenerContainerFactory | 容器工厂类 | 提供容器模版,可以统一配置并发重试等行为 |
MessageListenerContainer | 消息消费容器 | 管理消费者线程和消息分发 |
RabbitListenerEndpointRegistry | 全局挂管理中心 | 负责容器的注册 |
MessageConverter | 消息序列化 | 向交换机发送消息时,序列化消息内容,例如将java对象转为JSON字符传 |
CachingConnectionFactory | 连接池管理 | 优化连接和 Channel 复用 |
RetryTemplate | 消费重试机制 | 消费者业务逻辑执行失败后,需要重试 |
RabbitTransactionManager | 事务管理 | 需要原子性操作的场景 |
DirectReplyToContainer | RPC 支持 | 请求-响应模式 |
二、详细说明
1.AmqbAdmin(如RabbitAdmin)
作用:
- 管理RabbitMQ资源:可以声明交换机,队列以及两者之间的绑定关系。
关键方法:
方法 | 说明 |
---|---|
declareQueue() |
声明队列。 |
declareExchange() |
声明交换机。 |
declareBinding() |
绑定队列与交换机。 |
2.RabbitTemplate
作用:
- 消息生产者的核心工具类,用于向MQ发送消息
关键方法
方法/配置 | 说明 |
---|---|
convertAndSend() |
发送消息并自动序列化对象(如 JSON)。 |
sendAndReceive() |
发送消息并同步等待响应(RPC 模式)。 |
setConfirmCallback() |
设置消息发布确认回调(Publisher Confirm)。 |
setReturnCallback() |
设置消息无法路由时的回调(Mandatory 模式)。 |
execute() |
在 Channel 上执行自定义操作(如声明队列)。 |
3.SimpleRabbitListenerEndpoint
作用:
- 监听端点的具体实现:
定义单个消息监听端点的配置细节,包括队列名称、消息处理器、并发设置等。 - 灵活性:
支持编程式配置(非注解方式),适用于动态场景。
关键配置项
配置项 | 说明 |
---|---|
id |
端点的唯一标识符,用于在 RabbitListenerEndpointRegistry 中管理。 |
queueNames |
监听的队列名称(支持多个队列)。 |
messageListener |
消息处理逻辑(如 ChannelAwareMessageListener )。 |
concurrency |
并发消费者数量(如 "3-5" 表示最小 3,最大 5 个消费者)。 |
ackMode |
消息确认模式(如 AUTO 、MANUAL )。 |
4.MessageListenerContainer
作用:
- 消息消费的核心容器:
管理消费者线程、Channel
的分配以及消息的分发逻辑。 - 动态伸缩支持:
根据负载自动调整消费者数量(需配置maxConcurrentConsumers
)。
关键特性
特性 | 说明 |
---|---|
并发消费者管理 | 通过 concurrentConsumers 和 maxConcurrentConsumers 控制。 |
消息确认模式 | 支持 AUTO 、MANUAL 、NONE 。 |
异常恢复机制 | 自动重新连接或重启消费者。 |
5.SimpleRabbitListenerContainerFactory
作用:
- 监听容器的工厂类:
负责创建SimpleMessageListenerContainer
实例,并为其提供默认配置模板。 - 集中化管理:
统一配置连接工厂、并发策略、事务模式等,避免重复代码。
关键配置项
配置项 | 说明 |
---|---|
connectionFactory |
RabbitMQ 连接工厂(必填)。 |
concurrentConsumers |
初始并发消费者数(默认 1)。 |
maxConcurrentConsumers |
最大并发消费者数(动态伸缩时使用)。 |
acknowledgeMode |
消息确认模式(如 AckMode.MANUAL )。 |
prefetchCount |
每个消费者预取的消息数(影响吞吐量和公平性)。 |
retryTemplate |
消息重试策略(如 SimpleRetryPolicy )。 |
6.RabbitListenerEndpointRegistry
作用:
- 注册表与生命周期管理:
作为全局注册中心,负责管理所有RabbitListenerEndpoint
(消息监听端点)及其对应的MessageListenerContainer
(消息监听容器)。 - 动态操作支持:
允许运行时动态注册、注销、启动或停止监听器,无需重启应用。
关键功能:
- 存储所有监听端点的引用,通过唯一 ID 标识。
- 提供 API 操作监听容器(如
start()
、stop()
、getListenerContainer(id)
)。 - 在 Spring 应用启动时,自动扫描
@RabbitListener
注解并注册端
7.MessageConverter
作用:
- 消息序列化和反序列化
常用实现类:
实现类 | 说明 |
---|---|
SimpleMessageConverter |
默认实现,支持 String、byte[]。 |
Jackson2JsonMessageConverter |
基于 Jackson 的 JSON 转换器。 |
MarshallingMessageConverter |
支持 XML 序列化(Spring OXM)。 |
8.CachingConnectionFactory
作用:
- 连接池管理:负责创建和管理与RabbitMQ服务器的TCP连接(connection)和(channel)。
- 性能优化: 通过缓存
Connection
和Channel
避免频繁创建销毁的开销。
关键配置
配置项 | 说明 |
---|---|
host / port |
RabbitMQ 服务器地址。 |
username / password |
认证信息。 |
channelCacheSize |
Channel 缓存数量(默认 25)。 |
connectionTimeout |
连接超时时间(毫秒)。 |
9.RetryTemplate和MessageRecoverer
作用
-
消息消费重试
-
核心组件
- RetryTemplate:定义重试策略(次数、间隔)
- MessageRecoverer:最终失败后处理逻辑(例如投递DLQ)
//定义重试的策略
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate template = new RetryTemplate();
template.setRetryPolicy(new SimpleRetryPolicy(3)); // 最大重试3次
template.setBackOffPolicy(new ExponentialBackOffPolicy()); // 指数退避
return template;
}
//最终失败后处理逻辑
@Bean
public MessageRecoverer messageRecoverer(RabbitTemplate rabbitTemplate) {
return new RepublishMessageRecoverer(rabbitTemplate, "errorExchange", "errorRoutingKey");
}
10.RabbitTransactionManager
作用
- 事务管理
- 将 RabbitMQ 的 Channel 事务与 Spring 事务管理集成,确保消息发布和数据库操作的原子性
- 注意:事务模式性能比较差,通常推荐使用Push Confirm机制
11.DirectReplyToContainer
作用
- RPC(远程过程调用)支持:
利用 RabbitMQ 的Direct Reply-To
特性实现高效的请求-响应模式。 - 无需显式队列:
自动管理临时队列用于响应接收。
示例代码
@Bean
public DirectReplyToContainer replyToContainer(ConnectionFactory connectionFactory) {
DirectReplyToContainer container = new DirectReplyToContainer(connectionFactory);
container.setMessageListener(message -> {
// 处理 RPC 请求
});
return container;
}
graph TD
A[RabbitTemplate] -->|发送消息| B[RabbitMQ Server]
C[ConnectionFactory] -->|创建连接| D[MessageListenerContainer]
D -->|监听队列| B
E[RabbitListenerEndpointRegistry] -->|管理容器| D
F[SimpleRabbitListenerEndpoint] -->|定义配置| E
G[AmqpAdmin] -->|声明队列/交换机| B
H[MessageConverter] -->|序列化消息| A
I[RetryTemplate] -->|重试逻辑| D
本文来自博客园,作者:路口偶然遇见你,转载请注明原文链接:https://www.cnblogs.com/wzy/p/18938715