匠心零度 转载请注明原创出处,谢谢!

RocketMQ网络部署图

  • NameServer:在系统中是做命名服务,更新和发现 broker服务。
  • Broker-Master:broker 消息主机服务器。
  • Broker-Slave: broker 消息从机服务器。
  • Producer: 消息生产者。
  • Consumer: 消息消费者。

说明: rocketmq系列都将会以rocketmq-4.1.0-incubating进行介绍。

在阅读源码时做了一定的注释,公众号【匠心零度】回复:rocketmq,可获得基于rocketmq4.1.0加详细中文代码注释 。欢迎大家 star、fork !

今天的主题还是讨论namesrv,接着上篇RocketMQ(五):namesrv初探,继续谈谈namesrv,介绍namesrv前先介绍一个很重要的概念:topic,一般的服务注册发现都相对简单,但是在rocketmq里面就相对比较复杂了,因为整个过程都与topic息息相关,我觉得一篇一定不够,后续会继续补说明讲解。

Topic为何物

Topic是消息中间件里一个重要的概念,每一个Topic代表了一类消息,有了多个Topic,就可以对消息进行归类与隔离。

可以参照下图的动物园喂食模型,每一种动物都只能消费相对应的食品。

分区(Queue)为何物

RocketMQ是磁盘消息队列的模式,对于同一个消费组,一个分区只支持一个消费线程来消费消息。过少的分区,会导致消费速度大大落后于消息的生产速度。所以在实际生产环境中,一个Topic会设置成多分区的模式,来支持多个消费者,参照下图:

代码层

查看代码结构如图,看起来很少,其实很多公用的被放到其他地方了,由于需要提高给注册和查询(而且是多jvm进程中,所以需要rpc通信,查看之前写的:RocketMQ(二):RPC通讯)由于需要交互broker如何注册上namesrv的,其实就是rpc里面说的通讯以及到那里处理就是本模块的DefaultRequestProcessor处理,根据编码进行具体各各事情处理,重点关注注册borker信息。

Broker注册需要携带的信息:

  • 集群名称
  • 地址
  • broker名称
  • brokerId (0 表示 Master,>0 表示 Slave)
  • HA地址(主备通信交互,一般都是为broker的ip,端口+1)
  • Topic配置(topic名称,读写队列数据,权限等信息)
  • filterServerList
  • channel

假如我们需要搭建的集群为下图模式:

实例代码:

TopicConfigSerializeWrapper topicConfigSerializeWrapper = new TopicConfigSerializeWrapper();
ConcurrentHashMap<String, TopicConfig> topicConfigConcurrentHashMap = new ConcurrentHashMap<>();
TopicConfig topicConfig = new TopicConfig();
topicConfig.setWriteQueueNums(8);
topicConfig.setTopicName("test");
topicConfig.setPerm(6);
topicConfig.setReadQueueNums(8);
topicConfig.setOrder(false);
topicConfigConcurrentHashMap.put("test", topicConfig);
topicConfigSerializeWrapper.setTopicConfigTable(topicConfigConcurrentHashMap);
Channel channel = mock(Channel.class);
RegisterBrokerResult registerBrokerResult = routeInfoManager.registerBroker("rocketmq-cluster", "192.168.116.115:10911", "broker-a", 0, "192.168.116.115:10912",topicConfigSerializeWrapper, new ArrayList<String>(), channel);RegisterBrokerResult registerBrokerResult = routeInfoManager.registerBroker("rocketmq-cluster", "192.168.116.116:10911", "broker-b", 0, "192.168.116.115:10912",topicConfigSerializeWrapper, new ArrayList<String>(), channel);RegisterBrokerResult registerBrokerResult = routeInfoManager.registerBroker("rocketmq-cluster", "192.168.116.115:11911", "broker-b", 1, "192.168.116.115:11912",topicConfigSerializeWrapper, new ArrayList<String>(), channel);RegisterBrokerResult registerBrokerResult = routeInfoManager.registerBroker("rocketmq-cluster", "192.168.116.116:11911", "broker-a", 1, "192.168.116.115:11912",topicConfigSerializeWrapper, new ArrayList<String>(), channel);
复制代码

下面我们简单描述下各各关系, namesrv集群:

BrokerData关系:

QueueData关系:

根据topic获取TopicRouteData:

参考

阿里RocketMQ


如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

加入知识星球,一起探讨!

RocketMQ(六):namesrv再探相关推荐

  1. 机器学习平台系列(六) - 再探 Jupyter Lab:在 CentOS 下制作 Docker 镜像

    文章目录 1.环境版本 2.准备工作 2.1 安装 Docker 2.2.上传 Anaconda3 3.制作镜像 3.1 拉取镜像 3.2 安装 Anaconda 3.3 安装 Jupyter Lab ...

  2. 【Vue.js 牛刀小试】:第九章 - 组件基础再探(data、props)

    系列目录地址 一.基础知识概览 第一章 - 一些基础概念(posted at 2018-10-31) 第二章 - 常见的指令的使用(posted at 2018-11-01) 第三章 - 事件修饰符的 ...

  3. 联发科mtk手机处理器怎么样_5G手机价格将再探新低!联发科天玑700芯片发布:入门级5G处理器...

    ↑↑↑点击上方蓝字订阅每日最新国产手机资讯 今年5G手机的普及之所以能进展的如此迅速,联发科在5G芯片领域的的活跃功不可没.今天一早,联发科发布的全新的天玑700移动平台,标志着5G手机的价格将进一步 ...

  4. 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类

    上次我对C#类与结构体做了一次速度评测(http://blog.csdn.net/zyl910/article/details/6788417).经过一段时间思索,发现还可以进一步探讨-- 第一.栈变 ...

  5. SAP MM 工序委外场景再探 – 相关采购申请单据中的总账科目确定

    SAP MM 工序委外场景再探 – 相关采购申请单据中的总账科目确定 如下的采购申请,是工序委外场景的采购申请, 它在工单1000030 Release的时候被自动触发. 问题是:这个PR上的总账科目 ...

  6. RxSwift学习--核心逻辑再探

    前言 通过上一篇内容RxSwift学习--核心逻辑初探,对RxSwift有了些初步的认知,下面通过源码来看一下RxSwift到底有多骚 RxSwift核心逻辑再探 先把上篇中的例子代码搬过来: //第 ...

  7. 【CTF大赛】2021 DASCTF July cybercms 一探再探

    引言 在前不久结束的 2021 DASCTF July X CBCTF 4th 比赛中,有一道名为 cybercms 的 web 题目. 预期解是从后台登录处进行 SQL 注入写入一句话木马,然而咱在 ...

  8. C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

    文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...

  9. 函数重载、引用再探、内联函数

    文章目录 函数重载 为什么C++支持重载,C语言不支持呢? extern "C" 引用再探 引用的特性 引用的使用场景 引用和指针 引用和指针的不同点: 内联函数 什么是内联函数? ...

最新文章

  1. 学Python真的可以无所欲为,连对门小姐姐的家wifi密码都可以破解
  2. linux i查看o性能度量,11.9.18 学习笔记:性能管理
  3. SSRS的安装、部署和配置
  4. 史上最全Python课程整理——我是如何从编程小白到Python研发工程师的
  5. git 配置免密登陆
  6. react学习(50)--解决异步执行顺序问题
  7. 小程序 报错 err code: 40029, errmsg: 'invalid code, hints: [ req_id: JhIay6yFe-XN5A3 ]'
  8. 尼康相机报错err_数码相机遇到这12种错误,自己动手就能解决,再不用找人维修...
  9. ddr4服务器内存和普通内存_买主板送DDR4内存!微星日联合大促开幕
  10. android 广播反注册后,BroadcastReceiver注册、使用及其权限
  11. 多元高斯分布的边缘概率和条件概率
  12. TextAppearance.Material.Widget.Button.Inverse,Widget.Material.Button.Colored
  13. commandname
  14. Pygame 入门基本指南
  15. opencv图像修复
  16. Unity笔记之Unity读取/写入Excel
  17. FreeRTOS消息队列
  18. 手把手教如何搭建一个百度网盘目录站点【保姆级】
  19. 工业机器人到底涉及了哪些高科技?
  20. 行人检测数据库(包含9个常见数据库)

热门文章

  1. VS2010 ,工程文件减肥
  2. 程序员能力矩阵 Programmer Competency Matrix
  3. ASP连接MYSQL问题点解决
  4. WLST - Presentation Transcript
  5. C#中运行命令行截取输出流的例子
  6. 使用Python中的reduce()函数求积
  7. Java学习_day003:运算符
  8. python合成gif动图_Python图像处理之gif动态图的解析与合成操作详解
  9. qt 表格表头嵌入全选全不选_6个word表格基础操作,看了再说会不会
  10. eolinker开源版5_开源土豪沉金版空气质量检测仪AirWolf