参考答案
RocketMQ 的消息模型
Message
就是要传输的消息,一个消息必须有一个主题,一条消息也可以有一个可选的Tag(标签)和额外的键值对,可以用来设置一个业务的key,便于开发中在 broker 服务端查找消息。
Topic
主题,是消息的第一级类型,每条消息都有一个主题,就像信件邮寄的地址一样。
主题就是我们具体的业务,例如:
一个电商系统可以有订单消息,商品消息,采购消息,交易消息等。
Topic和生产者和消费者的关系非常松散,生产者和 Topic 可以是1对多,多对1或者多对多,消费者也是这样。
Tag
标签,是消息的第二级类型,可以作为某一类业务下面的二级业务区分,它的主要用途是在消费端的消息过滤。
例如:
采购消息分为采购创建消息、采购审核消息、采购推送消息、采购入库消息、采购作废消息等,这些消息是同一 Topic 和不同的 Tag ,当消费端只需要采购入库消息时,就可以用 Tag 来实现过滤,不是采购入库消息的 tag 就不处理。
Group
组,可分为 ProducerGroup 生产者组合 ConsumerGroup 消费者组,一个组可以订阅多个 Topic 。
一般来说,某一类相同业务的生产者和消费者放在一个组里。
Message Queue
消息队列,一个 Topic 可以划分成多个消息队列。
Topic 只是个逻辑上的概念,消息队列是消息的物理管理单位,当发送消息的时候,Broker 会轮询包含该 Topic 的所有消息队列,然后将消息发出去。
有了消息队列,可以使得消息的存储可以分布式集群化,具有了水平的扩展能力。
offset
是指消息队列中的 offset (下标),消息队列可看做数组。
offset 是 java long,64位,理论上100年不会溢出。
所以,可以认为消息队列是一个长度无限的数据结构。
以上,是消息队列 RocketMQ 面试题【RocketMQ 的消息模型】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—