全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例

发布于:2025-07-03 ⋅ 阅读:(14) ⋅ 点赞:(0)
spring:
  rabbitmq:
    # ===== 基础连接配置 =====
    host: localhost             # RabbitMQ 服务器地址
    port: 5672                  # 默认端口
    username: guest             # 默认用户名
    password: guest             # 默认密码
    virtual-host: /             # 虚拟主机(默认/)
    
    # ===== 连接池配置 =====
    connection-timeout: 5s      # 连接超时时间
    cache:
      connection:
        mode: CHANNEL           # 连接缓存模式: CHANNEL(默认)/CONNECTION
        size: 25                # 缓存连接数
    
    # ===== SSL/TLS 安全配置 =====
    ssl:
      enabled: false            # 启用 SSL
      algorithm: TLSv1.2        # SSL 算法
      key-store: /path/to/keystore.jks
      key-store-password: secret
      trust-store: /path/to/truststore.jks
      trust-store-password: secret
    
    # ===== 生产者配置 =====
    template:
      retry:
        enabled: true           # 启用发送重试
        max-attempts: 3         # 最大重试次数
        initial-interval: 1000ms # 初始重试间隔
        multiplier: 2.0         # 重试间隔倍数
      mandatory: true           # 强制消息路由(触发ReturnCallback)
      receive-timeout: 5000ms   # 接收超时时间(用于接收操作)
    
    # ===== 消费者配置 =====
    listener:
      type: direct              # 监听器类型: direct/simple
      simple:
        concurrency: 5          # 最小消费者线程数
        max-concurrency: 10     # 最大消费者线程数
        prefetch: 50            # 每次预取消息数量
        auto-startup: true      # 是否自动启动监听器
        acknowledge-mode: auto  # 确认模式: auto(自动)/manual(手动)/none(无)
        retry:
          enabled: true         # 启用消费重试
          max-attempts: 3       # 最大重试次数
          initial-interval: 1000ms
          multiplier: 2.0
          max-interval: 10000ms
        default-requeue-rejected: false  # 拒绝消息时不重新入队
    
    # ===== 高级配置 =====
    connection-factory:
      requested-heartbeat: 60s  # 心跳超时时间
      connection-timeout: 5s    # 连接建立超时
    publisher-confirm-type: correlated  # 发布者确认模式: none/correlated/simple
    publisher-returns: true     # 启用发布者返回模式
    
    # ===== 自定义交换机/队列/绑定配置 =====
    direct-exchange: my-direct-exchange
    queue: my-queue
    routing-key: my.routing.key
    
    # ===== 死信队列配置 =====
    dead-letter-exchange: dlx.exchange
    dead-letter-routing-key: dlx.routing.key

# ===== 自定义属性扩展 =====
custom:
  rabbit:
    queue:
      order-queue:
        name: orders.queue
        durable: true
        exclusive: false
        auto-delete: false
      notification-queue:
        name: notifications.queue
        durable: true
        ttl: 60000  # 消息存活时间(ms)
    exchange:
      orders-exchange:
        name: orders.exchange
        type: topic
        durable: true

主要配置项说明:

  1. 连接配置

    • host/port: RabbitMQ 服务器地址
    • username/password: 认证信息
    • virtual-host: 虚拟主机隔离环境
    • connection-timeout: 连接超时时间
  2. 生产者配置

    • template.retry: 消息发送失败的重试策略
    • publisher-confirm-type: 消息确认机制
    • publisher-returns: 路由失败消息回调
  3. 消费者配置

    • listener.simple.concurrency: 消费者并发设置
    • prefetch: 控制流量(QoS)
    • acknowledge-mode: 消息确认方式
    • retry: 消费失败的重试策略
  4. 高级配置

    • cache.connection: 连接池配置
    • ssl: 安全连接配置
    • dead-letter-exchange: 死信队列设置
  5. 自定义队列/交换机

    • 可通过自定义属性定义多个队列/交换机
    • 支持 TTL、持久化等参数配置

重要注意事项:

  1. 确认模式选择

    • auto: Spring 自动确认(默认)
    • manual: 需手动调用 basicAck
    • none: 无确认(不推荐)
  2. 死信队列配置

    java代码

    @Bean
    public Queue orderQueue() {
        return QueueBuilder.durable(orderQueueName)
                .deadLetterExchange("dlx.exchange")
                .deadLetterRoutingKey("dlx.routing.key")
                .build();
    }
    
  3. 消息转换器
    推荐使用 JSON 序列化:

    java代码

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(jsonMessageConverter());
        return template;
    }
    
  4. 消费者并发控制

    yaml代码

    listener:
      simple:
        concurrency: 3  # 初始消费者数量
        max-concurrency: 10 # 最大消费者数量
    
  5. 生产环境建议

    • 启用 TLS 加密通信
    • 使用连接池 (cache.connection.size)
    • 配置合理的重试策略
    • 启用消息确认机制
    • 设置死信队列处理失败消息

根据实际业务需求调整配置参数,特别是并发数、prefetch count 和重试策略,这些对系统性能有显著影响。


网站公告

今日签到

点亮在社区的每一天
去签到