在系统架构中,消息队列的定位就是总线和管道,主要起到解耦上下游系统、数据缓存的作用。它不像数据库,会有很多计算、聚合、查询的逻辑,它的主要操作就是生产和消费。
我们会在以下情况选择使用消息队列:
比喻:就像快递公司的分拣中心
本质:Broker 本质上是一个进程,比如 RocketMQ 的 Broker 就是指 RocketMQ Server 启动成功后的一个进程。
实际部署:
️ 比喻:就像快递公司的不同业务线(普通快递、生鲜快递、大件快递)
定义:用来组织分区关系的一个逻辑概念
特点:
比喻:就像快递分拣中心的不同传送带
统一概念:分区、分片、Partition、Queue、MessageQueue 都是一个概念
作用:
比喻:生产者就像寄快递的人,消费者就像收快递的人
Producer(生产者):
Consumer(消费者):
比喻:就像同一个办公室的同事们,大家一起分担收快递的工作
作用:
比喻:就是具体的快递包裹
定义:指一条真实的业务数据,消息队列的每条数据都叫做一条消息
比喻:就像快递单号,记录你收到了第几个包裹
作用:
✅ 比喻:就像签收快递时的确认
作用:
比喻:就像快递公司的总部和分部
Leader(主副本):
Follower(从副本):
比喻:就像快递公司的不同仓库
定义:消息数据在底层存储时,分为多个文件存储时的文件
特点:
比喻:就像快递柜的起始和结束编号
StartOffset(起始位点):
EndOffset(结束位点):
比喻:就像快递公司的权限管理
作用:对集群中的资源进行权限控制
比喻:就像排队取快递,先到先得
定义:生产者按顺序写入的消息,消费者能否按相同顺序消费
应用场景:
⏰ 比喻:就像设置快递的送达时间
延时消息:
定时消息:
技术实现:两者内核实现相同,客户端体验略有差异
比喻:就像银行转账,要么成功要么失败
定义:发送一批消息,要么同时成功,要么同时失败
应用场景:
比喻:就像快递送不到时的重试机制
生产者重试:
消费者重试:
⏪ 比喻:就像可以重新查看历史快递记录
定义:消息消费成功后不删除,可以重复消费
应用场景:
比喻:就像群发短信,所有人都能收到
定义:一条消息能被多个消费者消费
实现方式:
️ 比喻:就像快递公司的"问题包裹"处理中心
作用:
使用场景:
比喻:就像VIP客户优先处理
定义:给消息设置权重,权重大的优先消费
应用场景:
比喻:就像按标签筛选快递
功能:
⏳ 比喻:就像快递的保质期
作用:
比喻:就像快递的全程跟踪
记录信息:
比喻:就像快递查询系统
查询方式:
比喻:就像压缩文件节省空间
作用:
实现位置:
比喻:就像一栋大楼里的不同公司
功能:
实现方式:
比喻:就像重要文件要备份
作用:
比喻:就像交通信号灯控制车流
控制维度:
用户下单 → 订单服务 → 消息队列 → 库存服务
↓
支付服务
↓
物流服务
交易请求 → 风控系统 → 消息队列 → 清算系统
↓
通知系统
用户发帖 → 内容审核 → 消息队列 → 推荐系统
↓
通知系统
消息队列就像现代系统架构中的"神经系统",它让各个系统组件能够高效、可靠地通信。理解这些基本概念,就像掌握了快递公司的运营规则,能够更好地设计和使用消息队列系统。
记住:消息队列的核心就是"生产"和"消费",其他所有功能都是围绕这两个核心操作展开的。
互动讨论:你在实际项目中遇到过哪些消息队列的挑战?欢迎在评论区分享你的经验和解决方案!
参考资料: