【源码解析1】核心概念

229 阅读3分钟

为什么选择RocketMQ

优势

  1. 使用Java语言,可从源码角度理解逻辑、排查问题,必要时可进行二次开发
  2. 特性丰富,比如顺序消息、事务消息、消息过滤、定时消息,可以覆盖更多复杂场景
  3. 大厂背书,作为阿里的开源项目,经过阿里核心业务的考验。通过字节内部大量业务也都使用RocketMQ

原理类课程学习方法

方法

  1. 循序渐进,一步一个脚印
  2. 业务场景学习
  3. 借助图片理解

RocketMQ核心概念

Broker

概念

它是处理Message的实体,它接收Producer传输的Message,并持久化到服务器,同时负责处理Consumer的消费请求。

特性

  1. 支持集群,避免单点故障场景。
  2. Message分布式分散存储在各个Broker节点上。

Topic

概念

一类或者一大类Message的集合,是业务的抽象概念

MessageQueue

概念

用来根据Topic存储Message,数据存储的抽象概念

特性

  1. 将Topic中的Message分散存储在不同的Broker中,防止单个大的Topic存储在一个Broker上,出现数据倾斜的场景
  2. Topic数据存储在不同的Broker中,能保证数据的部分可用

NameServer

概念

储存RocketMQ集群的元数据,比如集群有哪些活跃的Broker、集群里有哪些Topic、这些Topic的MessageQueue分别在哪些Broker上存储

特性

  1. Broker、Producer、Consumer会和NameServer有数据交互,Broker会通过心跳的方式持续的更新元数据
  2. 可集群部署

RocketMQ有哪些特性

简介

订阅与发布、顺序消费、消息过滤、消息消费重试、消息可靠、至少一次消费模型、死信度列、事务消息、延迟队列、回溯消息、流量控制、消息重投

顺序消费

分类

  1. 分区有序,当一个Topic中有多个MessageQueue时,虽然可以对多个MessageQueue并行消费,但是在一个MessageQueue中是有序的
  2. 全局有序,一个Topic只分配一个MessageQueue,无法并行消费,但能保证全局有序

消息过滤

实现

生产者和消费者通过传递tag参数实现消息过滤

事务消息

概念

将发送消息的本地事务和投递消息操作组合成一个事务

执行过程

成功

  1. 本地事务运行、并且成功(比如往数据库写订单数据成功)
  2. 投递消息到消息队列成功

失败

  1. 本地事务失败(比如往数据库写订单数据失败)
  2. 投递消息操作取消

延迟队列

概念

可设定消息的延时时间,延迟一段时间之后,Consumer才能收到数据

特性

只提供18个时间选项供用户选择,分别是1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

死信队列

概念

存储无法被正常消费的消息,无法被正常消费的消息表示达到最大重试次数的消息(默认是16次)

特性

  1. 死信队列会带上%DLQ%前缀,且后面跟上消费组的名称
  2. Message默认3天后会消失

消息发送方式

方式

  1. SYNC:Producer发送Message后,需要Broker回复之后,才会发送下一条消息
  2. ASYNC:Producer发送Message后,不需要等待Broker回复,通过回调的方式等待Broker的响应
  3. ONEWAY:Producer发送Message后,不需要等待Broker回复,也不需要通过回调处理Broker的响应。性能很好,日志收集场景可以考虑ONEWAY方式

服务间通讯用的什么协议

RocketMQ服务间通信使用的是自定义的通信协议,称为RocketMQ协议。

RocketMQ协议是一种基于TCP/IP的二进制协议,用于在RocketMQ的生产者、消费者和消息队列服务器之间进行通信。