RocketMQ NameServer网络通信架构(基于Netty)
初始化
Netty是负责监听、处理Broker和客户端发送的网络请求的,NameServer通过9876这个端口接收来自Broker、客户端的网络请求,如Broker注册自己、客户端拉取Broker路由数据等。
在构建好NamesrvController后,会通过start方法来启动这一核心组件。首先要初始化NamesrvController
//初始化NamesrvController
boolean initResult = controller.initialize();
在这个方法内,会构建Netty网络服务器:
//构造NettyRemotingServer,即Netty网络服务器
this.remotingServer = new NettyRemotingServer(this.nettyServerConfig, this.brokerHousekeepingService);
public NettyRemotingServer(final NettyServerConfig nettyServerConfig,final ChannelEventListener channelEventListener) {super(nettyServerConfig.getServerOnewaySemaphoreValue(), nettyServerConfig.getServerAsyncSemaphoreValue());this.serverBootstrap = new ServerBootstrap();
}
这个ServerBootstrap就代表一个Netty网络服务器,通过它,可以让Netty去监听一个端口号上的网络请求。
这个NettyRemotingServer,就是RocketMQ基于Netty API开发的网络服务器组件。
启动
执行NamesrvController的start方法,就是启动NamesrvController,也就是启动NettyRemotingServer,走NettyRemotingServer#start()方法。
在此会设置一堆的网络请求处理器:
//设置一堆的网络请求处理器。// handshakeHandler:连接握手;NettyDecoder:编码解码;IdleStateHandler:连接空闲管理;// connectionManageHandler:网络连接管理;serverHandler:网络请求处理.childHandler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(defaultEventExecutorGroup, HANDSHAKE_HANDLER_NAME, handshakeHandler).addLast(defaultEventExecutorGroup,encoder,new NettyDecoder(),new IdleStateHandler(0, 0, nettyServerConfig.getServerChannelMaxIdleTimeSeconds()),connectionManageHandler,serverHandler);}});
最后通过ServerBootstrap的bind方法,绑定、监听了9876端口号。至此,Netty启动了,开始监听9876了
RocketMQ NameServer网络通信架构(基于Netty)相关推荐
- 基于netty的微服务架构
基于netty的微服务架构 微服务一篇好文章 http://san-yun.iteye.com/blog/1693759 教程 http://udn.yyuap.com/doc/essential-n ...
- 基于Netty的RPC架构实战演练
基于Netty的RPC架构实战演练 NIO netty服务端 netty客户端 netty线程模型源码分析(一) netty线程模型源码分析(二) netty5案例学习 netty学习之心跳 prot ...
- RocketMQ NameServer源码剖析
概述 NameServer是一个简单的 Topic 路由注册中心,支持 Topic.Broker 的动态注册与发现. 主要包括两个功能: Broker管理 ,NameServer接受Broker集群的 ...
- RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读
文章目录 Rocketmq整体架构 namesrv broker producer & consumer 通信方式 Rocketmq整体架构 RocketMQ-初体验RocketMQ(01)_ ...
- RocketMQ学习笔记(7)----RocketMQ的整体架构
1. RocketMQ主要的9个模块,如图: 2. 模块介绍 1. rocketmq-common:通用的常量枚举,基类方法或者数据结构,按描述的目标来分包,通俗易懂.报名有admin,consume ...
- Java编写基于netty的RPC框架
一 简单概念RPC: ( Remote Procedure Call),远程调用过程,是通过网络调用远程计算机的进程中某个方法,从而获取到想要的数据,过程如同调用本地的方法一样.阻塞IO :当阻塞I/ ...
- RocketMQ初步应用架构理论
RocketMQ初步应用架构理论 写给RocketMQ架构应用入门,内容涉及它的设计机理以及推到出来的应用注意事项,入门人员请看. 稍微涉及技术细节,留以我设计中间件时参考,将来整理深度文档时会抽取走 ...
- 基于 Netty 网络编程项目实战课程
一 基于 Netty 网络编程项目实战课程 1项目介绍 2Netty 介绍与相关基础知识 2.1Netty 介绍 简介 Netty 是由 JBOSS 提供的一个 java 开源框架.Netty 提供异 ...
- 几十行代码基于Netty搭建一个 HTTP Server
目前正在写的一个叫做 jsoncat 的轻量级 HTTP 框架内置的 HTTP 服务器是我自己基于 Netty 写的,所有的核心代码加起来不过就几十行.这得益于 Netty 提供的各种开箱即用的组件, ...
最新文章
- python基础-第九篇-9.3线程池
- Mysql服务器问题(2013.3.5日发现)
- cad绘制椭圆的方法有几种_你还在头疼CAD系统变量如何设置?这些你知道几个吗?...
- 深度学习-循环神经网络(RNN)
- LeetCode2:Add Two Numbers
- docker 配置selenium调用Firefox无界面浏览器
- IEWebBrowser
- Shell 工作原理
- 微软推出的在线代码查看神器github1s
- thinkphp6阿里云短信新版sdk对接(tp5对接新版阿里云短信sdk)
- 数学图形之双曲抛物面
- 耗时86小时的「百变小樱」最强数据可视化作品!
- 颜色代码表#FFFFFF #FF0000 #00FF00 #FF00FF (2015-07-21 10:39)转载
- Android 谷歌拼音输入法最新发布
- Linux alarm闹钟函数
- 【Java项目】好客租房——数据库集群部署
- 四川绵阳成立大中华区首个 IBM大数据分析竞争力中心
- 游戏界的“扛把子”,“3D 游戏之父”, 约翰•卡马克的传奇人生
- SQL的采集与查询教程
- 营销组合--4P理论vs4CS
热门文章
- 让Java程序只运行一个实例
- 173. Binary Search Tree Iterator
- SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 简介、SpringCloudSleuth 基本配置、数据采集)...
- 简单又实用的pandas技巧:如何将内存占用降低90%
- GARFIELD@09-28-2004
- python中collection.Counter and和的区别
- readv和writev函数
- Python 基于Python从mysql表读取千万数据实践
- c语言程序设计案例教程(第2版)笔记(三)—变量、结构体
- MapReduce——shuffle