RocketMQ(六):namesrv再探
匠心零度 转载请注明原创出处,谢谢!
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再探相关推荐
- 机器学习平台系列(六) - 再探 Jupyter Lab:在 CentOS 下制作 Docker 镜像
文章目录 1.环境版本 2.准备工作 2.1 安装 Docker 2.2.上传 Anaconda3 3.制作镜像 3.1 拉取镜像 3.2 安装 Anaconda 3.3 安装 Jupyter Lab ...
- 【Vue.js 牛刀小试】:第九章 - 组件基础再探(data、props)
系列目录地址 一.基础知识概览 第一章 - 一些基础概念(posted at 2018-10-31) 第二章 - 常见的指令的使用(posted at 2018-11-01) 第三章 - 事件修饰符的 ...
- 联发科mtk手机处理器怎么样_5G手机价格将再探新低!联发科天玑700芯片发布:入门级5G处理器...
↑↑↑点击上方蓝字订阅每日最新国产手机资讯 今年5G手机的普及之所以能进展的如此迅速,联发科在5G芯片领域的的活跃功不可没.今天一早,联发科发布的全新的天玑700移动平台,标志着5G手机的价格将进一步 ...
- 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
上次我对C#类与结构体做了一次速度评测(http://blog.csdn.net/zyl910/article/details/6788417).经过一段时间思索,发现还可以进一步探讨-- 第一.栈变 ...
- SAP MM 工序委外场景再探 – 相关采购申请单据中的总账科目确定
SAP MM 工序委外场景再探 – 相关采购申请单据中的总账科目确定 如下的采购申请,是工序委外场景的采购申请, 它在工单1000030 Release的时候被自动触发. 问题是:这个PR上的总账科目 ...
- RxSwift学习--核心逻辑再探
前言 通过上一篇内容RxSwift学习--核心逻辑初探,对RxSwift有了些初步的认知,下面通过源码来看一下RxSwift到底有多骚 RxSwift核心逻辑再探 先把上篇中的例子代码搬过来: //第 ...
- 【CTF大赛】2021 DASCTF July cybercms 一探再探
引言 在前不久结束的 2021 DASCTF July X CBCTF 4th 比赛中,有一道名为 cybercms 的 web 题目. 预期解是从后台登录处进行 SQL 注入写入一句话木马,然而咱在 ...
- C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员
文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...
- 函数重载、引用再探、内联函数
文章目录 函数重载 为什么C++支持重载,C语言不支持呢? extern "C" 引用再探 引用的特性 引用的使用场景 引用和指针 引用和指针的不同点: 内联函数 什么是内联函数? ...
最新文章
- 学Python真的可以无所欲为,连对门小姐姐的家wifi密码都可以破解
- linux i查看o性能度量,11.9.18 学习笔记:性能管理
- SSRS的安装、部署和配置
- 史上最全Python课程整理——我是如何从编程小白到Python研发工程师的
- git 配置免密登陆
- react学习(50)--解决异步执行顺序问题
- 小程序 报错 err code: 40029, errmsg: 'invalid code, hints: [ req_id: JhIay6yFe-XN5A3 ]'
- 尼康相机报错err_数码相机遇到这12种错误,自己动手就能解决,再不用找人维修...
- ddr4服务器内存和普通内存_买主板送DDR4内存!微星日联合大促开幕
- android 广播反注册后,BroadcastReceiver注册、使用及其权限
- 多元高斯分布的边缘概率和条件概率
- TextAppearance.Material.Widget.Button.Inverse,Widget.Material.Button.Colored
- commandname
- Pygame 入门基本指南
- opencv图像修复
- Unity笔记之Unity读取/写入Excel
- FreeRTOS消息队列
- 手把手教如何搭建一个百度网盘目录站点【保姆级】
- 工业机器人到底涉及了哪些高科技?
- 行人检测数据库(包含9个常见数据库)
热门文章
- VS2010 ,工程文件减肥
- 程序员能力矩阵 Programmer Competency Matrix
- ASP连接MYSQL问题点解决
- WLST - Presentation Transcript
- C#中运行命令行截取输出流的例子
- 使用Python中的reduce()函数求积
- Java学习_day003:运算符
- python合成gif动图_Python图像处理之gif动态图的解析与合成操作详解
- qt 表格表头嵌入全选全不选_6个word表格基础操作,看了再说会不会
- eolinker开源版5_开源土豪沉金版空气质量检测仪AirWolf