RabbitMQ介绍(异步处理中间件)

RabbitMQ 是一个开源的 消息中间件(Message Broker),用于在分布式系统中实现异步通信、解耦、削峰填谷等核心能力。

其核心本质: 通过“消息”作为中介,实现服务之间的松耦合通信机制


1.核心协议与实现

  • 基于协议:AMQP(Advanced Message Queuing Protocol)
  • 语言实现:Erlang(高并发、高可靠)
  • 特点:
    • 天然支持分布式
    • 高可用(HA)
    • 高吞吐(适中,非极限型)

2. RabbitMQ 核心架构

2.1 架构模型

flowchart LR
    P[Producer] --> E[Exchange]
    E --> Q[Queue]
    Q --> C[Consumer]
    
    E -->|Routing Key| Q

2.2 组件说明

组件 作用
Producer 消息生产者
Exchange 消息路由中心
Queue 消息存储队列
Consumer 消费者
Binding Exchange 与 Queue 的绑定规则

2.3 Exchange 类型(关键)

类型 路由规则 场景
direct 精确匹配 routing key RPC / 精准投递
fanout 广播 日志分发
topic 通配符匹配 复杂路由(推荐)
headers header匹配 较少使用

3. 工作流程

3.1 消息流转流程

sequenceDiagram
    participant P as Producer
    participant E as Exchange
    participant Q as Queue
    participant C as Consumer

    P->>E: 发送消息
    E->>Q: 路由消息
    Q->>C: 投递消息
    C->>Q: ACK确认

4. 核心特性

4.1 解耦

  • 服务之间不直接调用
  • 降低系统耦合度

4.2 异步处理

  • 提升系统吞吐
  • 减少响应时间

4.3 削峰填谷

graph LR
    A[高峰流量] --> B[Queue缓冲]
    B --> C[后台慢慢消费]

4.4 可靠性机制

机制 说明
ACK 消费确认
持久化 队列/消息持久化
Publisher Confirm 生产者确认
Dead Letter Queue 死信队列
Retry 重试机制

5. 高级机制(生产环境关键)

5.1 死信队列(DLQ)

触发条件:

  • 消费失败(reject / nack)
  • TTL过期
  • 队列满

5.2 延迟队列

实现方式:

  • TTL + DLX(推荐)
  • 插件:rabbitmq_delayed_message_exchange

5.3 消息顺序性

  • RabbitMQ 默认 不保证全局顺序

  • 可通过:

    • 单队列 + 单消费者
    • 或业务层控制

5.4 消息幂等性(必须)

常见方案:

  • 唯一ID去重
  • Redis 去重
  • 数据库幂等表

6. RabbitMQ vs Kafka

维度 RabbitMQ Kafka
模型 Broker + Queue Log
顺序性 强(分区内)
吞吐量 中等 极高
延迟 较低
使用复杂度 较高
场景 业务解耦 大数据流

7.总结

RabbitMQ = 可靠消息分发系统(解耦 + 异步 + 削峰)