ToB企服应用市场:ToB评测及商务社交产业平台

标题: 图解RocketMQ之主题Topic详解 [打印本页]

作者: 东湖之滨    时间: 2024-8-24 14:42
标题: 图解RocketMQ之主题Topic详解
大家好,我是苍何。
上一篇 图解RocketMQ之初识MQ 已经介绍了消息队列的基础概念、常用的消息队列框架以及 RocketMQ 的团体设计架构。

还没看过或者已经忘记的小同伴可以看看上一篇哈。
我们只有先创建团体的框架和开端的概念,才能更加深入的学习他的技术细节。(学任何技术或知识都是如此,ps:这可不是苍何说的,书本上都这么说。)
上一篇中讲了 RocketMQ 的四大核心概念,也即生产者、消耗者、broker、nameserver。作为消息队列的宠儿,可不止这 4 个概念,还有其他比较紧张的概念和模型,只有充分明确了这些核心的理念,才能更好的明确和利用 RocketMQ。
好,你现在先闭上眼,看能想到哪些概念或者名词呢?
我想你第一个想到的应该就是 topic 了(反正我是最先想到了他),OK,那我们这一篇的主题也就是主题 topic,固然此主题非彼主题,不外概念上相差不大,这就是中文的强大之处了。
Topic 概念界说

我们先来看看官方界说:
   主题是 RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。
  我的明确主题就是消息的分类,比如上一篇说到的鸡毛的餐厅中订单消息是一类主题消息,顾客下单的消息都往订单消息这个主题里面发,那么同样鸡鸡毛的朋友狗毛约他去打球,就属于打球主题消息,依此类推,不难发现,主题消息的分类其实是受业务所决定的,你要发什么业务消息最好单独是一个 Topic 主题,大家相互之间互不干扰。
   现现在垃圾都要做好干湿分类,消息可不能一个 topic 干到底哦。
  

Topic 主要有 2 大核心作用:

模型关系

在 RocketMQ 中主题 Topic 所处的流程和位置如下:

其实 Topic 是一个逻辑的概念,并不是一个现实的消息容器,每个 Topic 包罗多个消息队列(Queue),队列是消息的现实存储单元,每个队列独立存储消息,队列数量在创建 Topic 时可以设置,后续也可以动态调整。
生产者发送消息时,消息会根据一定战略分配到差别的队列中,常见的分配战略包罗轮询(Round Robin)和哈希(Hashing)。消耗者消耗消息时,同样是从这些队列中拉取消息。
Topic 属性和设置

Topic 主要有以下内部属性,并且可以用来设置。
主题名称

主题名称是在创建主题的时间,我们自己界说的,主要是用于标识主题,名称需要满足集群内唯一。虽然理论上可以按照自己所想随便界说,但官方照旧苦口婆心的给了做了我们一些限制,看看也无妨:
   Topic 定名应该尽量利用简短、常用的字符,避免利用特别字符。特别字符会导致体系分析出现非常,字符过长可能会导致消息收发被拒绝。
  种别具体建议或限制字符建议字母az或AZ、数字0~9以及下划线(_)、短划线(-)和百分号(%)长度建议1~64个字符体系保留字符Topic名称不允许利用以下保留字符或含有特别前缀的字符定名保留字符TBW102, BenchmarkTest, SELF_TEST_TOPIC, OFFSET_MOVED_EVENT, SCHEDULE_TOPIC_XXXX, RMQ_SYS_TRANS_HALF_TOPIC, RMQ_SYS_TRACE_TOPIC, RMQ_SYS_TRANS_OP_HALF_TOPIC特别前缀rmq_sys, %RETRY%, %DLQ%, rocketmq-broker- 所以,大家照旧老诚实实的定名吧,别触犯人官方的底线,警惕消息都收不到哦。
队列列表

队列既是主题的组成单元,又是消息的最小存储单元,一个主题内包罗一个或多个队列,消息现实存储在主题的各队列内。队列需要创建主题的时间指定,且一个主题内至少包罗一个队列。
队列的主要作用如下: