RocketMQ(二)——基本概念

1.消息(Message)

消息是指,消息系统所传出信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题

2.主题(Topic)

image.png

Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
topic:message 1:n
message:topic 1:1

一个生产者可以同时发送多种Topic消息;而一个消费者只对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic消息。
producer:topic 1:n
consumer:topic 1:1

3.标签(Tag)

为消息设置的标签,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。标签能够有效保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现对不同自主体的不同消费逻辑,实现更好的扩展性

Topic是消息的一级分类,Tag是消息的二级分类

4.队列

存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的是该Topic的消息。一个Topic的Queue也被称为一个Topic中消息的分区(Partition)
一个Topic的Queue中的消息只能被一个消费者组中的一个消费者消费。一个Queue中的消息不允许同一个消费者组中的多个消费者同时消费

分片(sharding)
分片不同于分区。在RocketMQ中,分片指的是存放相应Topic的Broker。每个分片中会创建出相应数量的分区,即Queue,每个Queue的大小是相同的。

image.png
5.消息标识(MessageID/Key)

RocketMQ中每个消息拥有唯一的MessageID,且可以携带具有业务标识的Key,以方便对消息的查询。不过需要注意的是,MessageID有两个:在生产者send()消息时会自动生成一个MessageID(msgId),当消息到达Broker后也会自动生成一个MessageId(offsetMsgId)。
msgId、offsetMsgId与key都称为消息标识。

  • msgId:右producer端生成,规则为:producerIp+进程pid+MessageClientIDSetter类的ClassLoader的hashCode+当前时间+AutomicInteger自增计数器
  • offsetMsgId:右broker端生成,其规则为:brokerIp+物理分区的offset
  • key:由用户指定的业务相关的唯一标识
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容