最近的项目开发中涉及到支付业务的模块需要用到MQ进行业务解耦以及把用户请求量削峰填谷,提高系统的可用性和可靠性,我们选择了RocketMQ来部署消息中间件集群,我也在此回顾和归纳下RocketMQ的相关知识。
什么是RocketMQ
阿里开源的分布式消息中间件,单机就能支持千万级的消息堆积,集群模式能满足海量消息堆积的场景
RocketMQ的特点
支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
支持拉(pull)和推(push)两种消息模式
单一队列百万消息的堆积能力
支持多种消息协议,如 JMS、MQTT 等
分布式高可用的部署架构,满足至少一次消息传递语义
提供 docker 镜像用于隔离测试和云集群部署
提供配置、指标和监控等功能丰富的 Dashboard
核心机制与原理
RocketMQ底层基于队列模型来实现消息收发功能。RocketMQ集群中包含4个模块:Namesrv, Broker, Producer, Consumer。
Namesrv: 存储当前集群所有Brokers信息、Topic跟Broker的对应关系。
Broker: 集群最核心模块,主要负责Topic消息存储、消费者的消费位点管理(消费进度)。
Producer: 消息生产者,每个生产者都有一个ID(编号),多个生产者实例可以共用同一个ID。同一个ID下所有实例组成一个生产者集群。
Consumer: 消息消费者,每个订阅者也有一个I