Topic概念定义
- 主题:RocketMQ中消息传输和存储的顶层容器,用于标识同类业务中逻辑的消息,可理解为消息的分类,主题消息的分类取决于业务,要发送的业务消息最好单独是一个Topic主题,以保证互相不被干扰
- Topic主要有两大核心作用:
1)定义数据的分类隔离:将不同业务类型的数据拆分到不同的主题中管理,通过主题实现存储的隔离性和订阅隔离性
2)定义数据的身份和权限:RocketMQ的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限管理
模型关系
- 在RocketMQ中主题Topic所处的流程和位置如下:

- Topic是一个逻辑概念,而非实际的消息容器
- 每个Topic包含多个消息队列(Queue),队列是消息的实际存储单元,每个队列独立存储消息,队列数量在创建Topic时可以配置,也可后续动态调整
- 生产者发送消息时,消息会根据一定策略分配到不同的队列中,常见的分配策略包括轮询(Round Robin)和哈希(Hashing)
- 消费者消费时,同样是从这些队列中拉取消息
Topic属性和配置
- Topic主要有以下内部属性可用来配置:
主题名称
- 主题名称是在创建主题时,由开发者定义,主要用于标识主题,名称需要在集群内唯一,官方给名称命名的建议如下:
1)Topic命名应该尽量使用简短、常用的字符,字符过长可能会导致拒绝收发消息
2)避免使用特殊字符,特殊字符可能会出现解析异常

队列列表
- 队列既是主题的组成单元,又是消息的最小存储单元
- 队列需要在创建主题时指定,一个主题内至少包含一个队列,消息实际存储在主题的各队列中
队列的主要作用如下: - 存储顺序性:队列天然具备顺序性,消息按照进入队列的顺序进行读取,即先进先出,消息在队列中的位置和消息之间的顺序通过位点(Offset)来标记管理
- 流式操作语义:RocketMQ基于队列的存储模型可确保消息从任意Offset读取任意数量的消息,以此实现类似聚合读取,回溯读取等特性,这些特性是RabbitMQ、ActiveMQ等非队列存储模型所不具备的

最低0.47元/天 解锁文章
3604

被折叠的 条评论
为什么被折叠?



