RabbitMQ配置项
一、核心连接配置(基础必配)
控制 RabbitMQ 服务的连接基础信息,是客户端与 MQ 建立通信的核心。
配置项 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
spring.rabbitmq.host | String | localhost | RabbitMQ 服务器地址(单机);集群场景用 addresses 替代 |
spring.rabbitmq.port | Integer | 5672 | 非 SSL 端口(默认通信端口);SSL 端口默认 5671 |
spring.rabbitmq.username | String | guest | 登录 MQ 的用户名(默认 guest 仅允许本地访问,生产需自定义) |
spring.rabbitmq.password | String | guest | 登录 MQ 的密码 |
spring.rabbitmq.virtual-host | String | / | 虚拟主机(MQ 中用于隔离资源的逻辑空间,默认 / ) |
spring.rabbitmq.addresses | String | - | 集群地址,格式:host1:port1,host2:port2 (优先级高于 host /port ) |
二、连接池配置(性能优化)
通过连接池复用 TCP 连接,避免频繁创建 / 销毁连接的开销(需依赖 spring-boot-starter-amqp
,默认自带连接池)。
配置项 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
spring.rabbitmq.connection-timeout | Duration | 60000ms (1 分钟) | 连接超时时间(格式支持 ms /s ,如 30s ) |
spring.rabbitmq.cache.connection.mode | Enum | CHANNEL | 连接池模式:- CHANNEL :复用连接,创建新通道(推荐,轻量级)- CONNECTION :复用连接对象 |
spring.rabbitmq.cache.connection.size | Integer | 1 | 连接池大小(仅 mode=CONNECTION 时生效) |
spring.rabbitmq.cache.channel.size | Integer | 25 | 每个连接的通道池大小(mode=CHANNEL 时生效) |
spring.rabbitmq.cache.channel.checkout-timeout | Duration | 0ms | 从通道池获取通道的超时时间(0 表示无限等待) |
三、消费者配置(消息接收核心)
控制消息消费者的行为(如预取数量、并发数、重试策略等),是 RabbitMQ 消费端优化的关键。
配置项 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
spring.rabbitmq.listener.simple.prefetch | Integer | 250 | 预取消息数量:消费者一次从队列预取的消息数(避免单消费者堆积,需根据业务调整) |
spring.rabbitmq.listener.simple.concurrency | Integer | 1 | 消费者最小并发数(固定并发数可直接设此值) |
spring.rabbitmq.listener.simple.max-concurrency | Integer | 1 | 消费者最大并发数(动态扩缩容时生效,需配合线程池) |
spring.rabbitmq.listener.simple.batch-size | Integer | 1 | 批量消费的消息数量(需开启批量监听,如 @RabbitListener(batch = true) ) |
spring.rabbitmq.listener.simple.batch-listener | Boolean | false | 是否启用批量监听(开启后需接收 List<Message> 或 List<POJO> ) |
spring.rabbitmq.listener.simple.acknowledge-mode | Enum | AUTO | 消息确认模式:- AUTO :框架自动确认(无异常则 ack ,有异常则 nack )- MANUAL :手动确认(需调用 channel.basicAck() /nack() )- NONE :不确认(MQ 发送后直接删除消息,风险高) |
spring.rabbitmq.listener.simple.default-requeue-rejected | Boolean | true | 消费失败时是否将消息重新入队(false 则直接丢弃或进入死信队列) |
spring.rabbitmq.listener.simple.idle-event-interval | Duration | - | 消费者空闲检测间隔(如 60s ,空闲时触发 ListenerContainerIdleEvent ) |
spring.rabbitmq.listener.simple.retry.enabled | Boolean | false | 是否启用消费重试(默认关闭,需手动开启) |
spring.rabbitmq.listener.simple.retry.max-attempts | Integer | 3 | 最大重试次数(启用重试后生效) |
spring.rabbitmq.listener.simple.retry.initial-interval | Duration | 1000ms | 首次重试间隔(后续按 multiplier 倍数递增) |
spring.rabbitmq.listener.simple.retry.multiplier | Double | 1.0 | 重试间隔倍数(如 2.0 表示每次间隔翻倍) |
spring.rabbitmq.listener.simple.retry.max-interval | Duration | 10000ms | 最大重试间隔(避免间隔无限增大) |
spring.rabbitmq.listener.simple.retry.stateless | Boolean | true | 是否为无状态重试(false 表示有状态,需配合事务) |
四、生产者配置(消息发送核心)
控制消息生产者的行为(如确认机制、超时时间、交换机默认配置等),保障消息发送的可靠性。
配置项 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
spring.rabbitmq.template.exchange | String | - | 生产者默认交换机(未指定交换机时使用) |
spring.rabbitmq.template.routing-key | String | - | 生产者默认路由键(未指定路由键时使用) |
spring.rabbitmq.template.default-receive-queue | String | - | 消费者默认接收队列(receive() 方法未指定队列时使用) |
spring.rabbitmq.template.mandatory | Boolean | false | 是否启用「强制投递」:- true :交换机无法路由消息时,触发 ReturnCallback 回调- false :无法路由时直接丢弃消息 |
spring.rabbitmq.template.receive-timeout | Duration | 0ms | 消费者接收消息的超时时间(0 表示无限等待) |
spring.rabbitmq.template.send-timeout | Duration | 0ms | 生产者发送消息的超时时间(0 表示无限等待,生产建议设 5000ms ) |
spring.rabbitmq.publisher-confirm-type | Enum | NONE | 生产者确认机制(保障消息到达交换机):- NONE :关闭确认- CORRELATED :消息发送后触发 ConfirmCallback (推荐)- SIMPLE :同步确认(阻塞,不推荐) |
spring.rabbitmq.publisher-returns | Boolean | false | 是否启用「消息返回」(保障交换机路由到队列):- true :路由失败时触发 ReturnCallback (需配合 mandatory=true ) |
五、SSL 安全配置(加密通信)
当 RabbitMQ 启用 SSL 时,客户端需配置证书相关信息(生产环境推荐启用)。
配置项 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
spring.rabbitmq.ssl.enabled | Boolean | false | 是否启用 SSL 加密通信 |
spring.rabbitmq.ssl.key-store | String | - | 客户端密钥库路径(含客户端证书,如 classpath:client-keystore.jks ) |
spring.rabbitmq.ssl.key-store-password | String | - | 密钥库密码 |
spring.rabbitmq.ssl.key-store-type | String | JKS | 密钥库类型(如 JKS 、PKCS12 ) |
spring.rabbitmq.ssl.trust-store | String | - | 信任库路径(含 MQ 服务器证书,验证服务器身份) |
spring.rabbitmq.ssl.trust-store-password | String | - | 信任库密码 |
spring.rabbitmq.ssl.trust-store-type | String | JKS | 信任库类型 |
spring.rabbitmq.ssl.algorithm | String | - | SSL 算法(默认使用 JVM 默认算法,如 TLSv1.2 ) |
spring.rabbitmq.ssl.validate-server-certificate | Boolean | true | 是否验证服务器证书(关闭后可能存在中间人攻击风险) |
六、集群与高级配置
针对 RabbitMQ 集群、节点选择、请求超时等高级场景的配置。
配置项 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
spring.rabbitmq.dynamic | Boolean | true | 是否动态创建连接工厂(默认开启,关闭后需手动配置连接工厂) |
spring.rabbitmq.requested-heartbeat | Duration | 60s | 心跳检测间隔(维持连接活性,避免连接被防火墙断开) |
spring.rabbitmq.node-locator | Enum | RANDOM | 集群节点选择策略:- RANDOM :随机选择节点- LOCAL_PREFERRED :优先选择本地节点(若客户端与 MQ 同机) |
spring.rabbitmq.publisher-connection-factory-bean-name | String | - | 生产者专用连接工厂的 Bean 名称(默认与消费者共用连接工厂,需自定义时配置) |
七、常用配置示例(yml 格式)
以下是生产环境中常见的配置组合,涵盖连接、消费、生产可靠性:
yaml
spring:rabbitmq:# 1. 基础连接host: 192.168.1.100 # MQ 服务器地址(集群用 addresses: 192.168.1.100:5672,192.168.1.101:5672)port: 5672username: prod_userpassword: Prod@123456virtual-host: /prod_vhost # 生产环境自定义虚拟主机connection-timeout: 30s # 连接超时# 2. 连接池优化cache:channel:size: 50 # 每个连接的通道池大小checkout-timeout: 5s # 通道获取超时# 3. 消费者配置(核心)listener:simple:prefetch: 100 # 预取100条消息(避免单消费者堆积)concurrency: 5 # 固定5个消费者并发acknowledge-mode: MANUAL # 手动确认(保障消息不丢失)default-requeue-rejected: false # 消费失败不重新入队(转死信)# 重试配置retry:enabled: truemax-attempts: 3initial-interval: 2smultiplier: 2.0max-interval: 10s# 4. 生产者可靠性(核心)template:send-timeout: 5s # 发送超时mandatory: true # 强制投递(路由失败触发回调)publisher-confirm-type: CORRELATED # 生产者确认(到达交换机回调)publisher-returns: true # 消息返回(路由失败回调)
关键注意事项
- 预取数量(
prefetch
):需根据消费者处理速度调整,处理快则增大(提高吞吐量),处理慢则减小(避免消息堆积)。 - 确认模式(
acknowledge-mode
):生产环境推荐MANUAL
(手动确认),避免框架自动确认导致消息丢失。 - 生产者可靠性:必须开启
publisher-confirm-type
+publisher-returns
+mandatory=true
,并实现ConfirmCallback
和ReturnCallback
处理异常。 - 集群配置:用
addresses
配置多节点,避免单节点故障导致服务不可用。 - SSL 配置:生产环境需启用 SSL,并正确配置密钥库 / 信任库,避免明文传输密码。