基础通信模块

Remoting模块是RocketMQ的基础通信模块。

分布式应用中不可避免的是跨进程通信,此类问题可以通过RPC调用解决,RocketMQ的Producer、Consumer、Broker之间的通讯也是通过RPC实现的,高性能RPC调用的主题:传输、协议、线程。

需要约定好特定的通讯协议。

消息传输完成后,通过什么样的线程模型处理线程请求也很重要。

传输,IO通信模型决定了通信性能,RocketMQ的remoting模块通过Netty实现了IO多路复用的Reactor通信模型。

在NameServer初始化完成后启动时,会创建一个NettyRemotingServer对象赋值给remotingServer,而后在Start方法中启动NettyRemotingServer的一个Netty服务端并初始化一个channel。

流程图示

NamesrvStartup.class

NamesrvController controller = createNamesrvController(args);
start(controller);public static NamesrvController start(final NamesrvController controller) throws Exception {if (null == controller) {throw new IllegalArgumentException("NamesrvController is null");}//初始化boolean initResult = controller.initialize();if (!initResult) {controller.shutdown();System.exit(-3);}

NamesrvController.class

    public boolean initialize() {this.kvConfigManager.load();//初始化NettyRemotingServerthis.remotingServer = new NettyRemotingServer(this.nettyServerConfig, this.brokerHousekeepingService);}

NettyRemotingServer.class

   @Overridepublic void start() {this.defaultEventExecutorGroup = new DefaultEventExecutorGroup(nettyServerConfig.getServerWorkerThreads(),new ThreadFactory() {private AtomicInteger threadIndex = new AtomicInteger(0);@Overridepublic Thread newThread(Runnable r) {return new Thread(r, "NettyServerCodecThread_" + this.threadIndex.incrementAndGet());}});prepareSharableHandlers();//初始化Netty channel ServerBootstrap childHandler =this.serverBootstrap.group(this.eventLoopGroupBoss, this.eventLoopGroupSelector).channel(useEpoll() ? EpollServerSocketChannel.class : NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, nettyServerConfig.getServerSocketBacklog()).option(ChannelOption.SO_REUSEADDR, true).option(ChannelOption.SO_KEEPALIVE, false).childOption(ChannelOption.TCP_NODELAY, true).localAddress(new InetSocketAddress(this.nettyServerConfig.getListenPort())).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);}});

RocketMQ Remoting模块源码功能分析相关推荐

  1. ensp大型网络环境设计与实现_mongodb内核源码设计实现、性能优化、最佳运维系列-网络传输层模块源码实现三...

    1. 说明 在之前的<<Mongodb网络传输处理源码实现及性能调优-体验内核性能极致设计>>和<<mongodb内核源码设计实现.性能优化.最佳运维系列-tran ...

  2. 分布式事务中间件 Fescar—RM 模块源码解读

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在SOA.微服务架构流行的年代,许多复杂业务上需要支持多资源占用场景,而在分布式系统中因为某个资源不足而导致其它资源占用 ...

  3. mysql 线程池源码模块_易语言Mysql线程池2.0模块源码

    易语言Mysql线程池2.0模块源码 易语言Mysql线程池2.0模块源码 系统结构:GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄 ...

  4. Wifi模块—源码分析Wifi热点扫描2(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点扫描过程部分的获取扫描结果的过程,也是Wifi扫描过程的延续,可以先看前面Wifi扫描的分析过程. Wifi模块-源码分析Wifi热点扫描(Andr ...

  5. Wifi模块—源码分析Wifi热点扫描(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点查找过程,也是Wifi启动的过程延续,Wifi启动过程中会更新Wifi的状态,框架层也有相应广播发出,应用层接收到广播后开始进行热点的扫描.可以先看 ...

  6. python树状节点 可拖拽_Python 的 heapq 模块源码分析

    原文链接:Python 的 heapq 模块源码分析 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中的子节点都与父母排序顺序关系.因为堆排序中的树是 ...

  7. Python 的 heapq 模块源码分析

    作者:weapon 来源:https://zhuanlan.zhihu.com/p/54260935 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中 ...

  8. XposedNoRebootModuleSample 不需要频繁重启调试的Xposed 模块源码例子

    XposedNoRebootModuleSample(不需要频繁重启调试的Xposed 模块源码例子) Xposed Module Sample No Need To Reboot When Debu ...

  9. 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)

    [摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...

  10. 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多线程(上)

    [摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...

最新文章

  1. 7.12-7.19 id、w、who、last、lastb、lastlog
  2. web前端响应式布局,自适应全部分辨率
  3. 卖家工具箱源码_我的测试和代码分析工具箱
  4. php 域名白名单,域名白名单验证
  5. 第四章、epub文件处理 -- epub文件内部组成
  6. python3 manage.py runserver 0.0.0.0:8000 没反应
  7. VB案例:计算圆锥体积与面积
  8. pku1063 Flip and Shift严格证明
  9. CSDN审核机制有点迷惑,决定逐步搬迁到简书
  10. 游戏开发经验谈(二):对战类全球服游戏的设计与实现
  11. 腾讯面试:我倒在了网络基础知识
  12. 以大数据架构电商2.0的新时代
  13. python 重定向 网址错_Python URL重定向问题
  14. 磁珠 符号_(整理)贴片磁珠规格
  15. 求和符号的定义和性质
  16. 漂洋过海去学习,一文读懂程序员如何从初级升级到高级
  17. 支付宝异步通知 asp
  18. 【Unity】创建一个自己的可交互AR安卓程序
  19. 南京师范大学计算机专业考研分数,南京师范大学2021考研分数线已公布
  20. PCIE 调试过程记录

热门文章

  1. atmega328p引脚图_【ATMEGA328P-PU PDF数据手册】_中文资料_引脚图及功能_(爱特美尔 ATMEL)-采芯网...
  2. SpringBoot Controller Post接口单元测试
  3. labelimg方框改变颜色
  4. 最小二乘法系统辨识小结
  5. 快压、360压缩、WinRAR关于打开快压通过超高压缩比压缩后的文件不兼容的问题
  6. python比赛2020_2020LPL春季赛3月15日比赛数据的数据分析(Python)
  7. 投票系统程序设计缺陷分析
  8. linux 图片浏览软件,FocusOn Image Viewer
  9. win7 升级IE11报错(无法安装)
  10. 小米路由pro php,完全拆解小米路由器Pro:无接口,预加硬盘无望