MQ 的消息模型 + 核心概念

一、消息队列的本质模型

所有 MQ 本质上都是同一个模型:

生产者(Producer) → 消息队列(Queue/Topic) → 消费者(Consumer)

再抽象一层:

发消息的人 → 存消息的地方 → 收消息的人

二、通用核心概念(所有 MQ 都有)

1. 生产者 Producer

  • 负责发送消息到 MQ
  • 不关心谁消费、什么时候消费
  • 只关心:发没发成功、会不会丢消息

2. 消费者 Consumer

  • 从 MQ 拉取 / 接收消息并处理
  • 关心:能不能收到、会不会重复、处理失败怎么办

3. 消息 Message

  • 载体:业务数据(JSON、字符串、字节)
  • 自带属性:消息 ID、时间戳、过期时间、重试次数等

4. 队列 / 主题 Queue / Topic

  • Queue:一对一,一条消息只被一个消费者处理
  • Topic:一对多,一条消息可以被多个消费组同时消费

5. 消费组 Consumer Group

一组消费者共同消费同一个 Topic/Queue
  • 同一组内:负载均衡(分摊消息)
  • 不同组间:广播(都收到全量消息)
这是 MQ 最重要的概念之一,几乎所有 MQ 都用这个模型。

6. 偏移量 Offset

消息在队列里的位置编号
  • 用来标记:消费者消费到哪了
  • 消费失败 / 重启后,从该位置继续消费

7. ACK 确认机制

消费者告诉 MQ:“这条消息我处理完了”
  • 自动 ACK:快,但可能丢消息
  • 手动 ACK:安全,保证不丢,但要自己控制

8. 持久化 Durable

MQ 重启后消息不丢失
  • 队列 / 主题持久化
  • 消息本身持久化
  • 消费位点持久化

9. 死信队列 Dead Letter Queue

处理失败、过期、被拒绝的消息,会进入死信

用于后续人工排查,不阻塞正常业务

10. 消息堆积

消费者处理太慢 → 队列里消息越来越多

表现:延迟变高、消费停滞


三、三大 MQ 的消息模型区别(核心重点)

1. RabbitMQ 模型:Exchange + Queue

完整链路:

Producer → Exchange → Queue → Consumer

  • Exchange 交换机:负责路由消息
    • Direct:精确匹配
    • Topic:通配符匹配
    • Fanout:广播(全部发)
    • Headers:按消息头匹配
  • Queue:真正存消息的地方
  • 一个消息可以被路由到多个队列
  • 典型:灵活路由、微服务解耦、异步通知

2. Kafka 模型:Topic + Partition

完整链路:

Producer → Topic → Partition → Consumer Group

  • Topic:逻辑分类(如 order_topic、pay_topic)
  • Partition 分区:物理分片,实现高吞吐
    • 一个 Topic 包含多个 Partition
    • 消息被均匀分发到不同分区
  • 顺序保证:同一个分区内严格有序
  • 典型:日志收集、大数据流、高吞吐场景

3. RocketMQ 模型:Topic + MessageQueue

和 Kafka 非常像,但更面向金融 / 电商高可靠
  • Topic:业务主题
  • MessageQueue:类似 Kafka 分区
  • 支持:事务消息、定时消息、死信、重试队列
  • 典型:电商订单、支付、高可靠金融消息

四、三种消息投递模式(所有 MQ 通用)

1. 集群消费(默认)

一个消息只被一个消费者处理

负载均衡,提高处理速度

2. 广播消费

一个消息被所有消费者都处理一遍

用于配置刷新、本地缓存更新等

3. 延迟 / 定时消息

消息发送后,等待一段时间才可见

RocketMQ 原生支持,Kafka/RabbitMQ 需要插件


五、一句话总结模型

  • RabbitMQ:灵活路由,Exchange 分发到 Queue
  • Kafka:高吞吐,分区并行,日志型流式处理
  • RocketMQ:高可靠,电商金融级,事务 / 定时消息强
上一篇 Linux 进入单用户模式 修改root密码
下一篇 WLAN Wi-Fi 6零漫游技术白皮书