消息队列(三) | 青训营笔记

53 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 36 天

RocketMQ

使用场景

低延时
针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期优惠等

RocketMQ 基本概念

image.png

Partution和ConsumerQueue一样

image.png

RocketMQ 架构

image.png 数据流也是通过Producer发送给Broker集群,再由Consumer进行消费
Broker节点有Master和Slave概念;
NameServer为集群提供轻量级服务发现和注册路由

存储模型

image.png

对于一个Broker来说,所有的消息会append到一个CommitLog上面,然后按照不同的Queue,重新Dispatch到不同的Consumer中,这样Consumer就可以按照Queue进行拉取消费,但需要注意的是,这里的ConsumerQueue所存储的不是真实的数据,真实的数据只存储再CommitLog中,这里存的仅仅是这个Queue所有消息在CommitLog上的位置,相当于是一个Queue的密集索引

高级特性

高级特性 - 事务场景

image.png

下单流程:首先保证库存足够更够顺利-1,这时候再让消息队列让我其他系统来处理,比如订单系统和商家系统,但是这里重要的是,库存服务和消息队列必须是在一个事务里,ACID,因此RocketMQ提供事务消息来保证类似场景

高级特性 - 事务消息

image.png

高级特性 - 延迟发送

image.png

image.png

高级特性 - 延迟消息

image.png

高级特性 - 处理失败

image.png

高级特性 - 消费重试和死信队列

image.png

image.png