欢迎来到皮皮网网站!

【海思3520源码】【h5币圈源码完整版】【最新内付暗雷源码商业版】netty应用与源码剖析

时间:2024-12-29 08:07:21 来源:主力进出筹码指标公式源码

1.Java开发书籍推荐(200多本)
2.RocketMQ路由中心 NameServer

netty应用与源码剖析

Java开发书籍推荐(200多本)

       整理了一份关于Java开发的应用源电子书资源,共约本PDF版本,码剖分享给需要的应用源朋友们。

       全部免费获取,码剖无需添加QQ,应用源无需关注公众号,码剖海思3520源码直接使用百度网盘链接下载。应用源

       请在下载后给予我一个赞,码剖顺便分享给还在寻找资源的应用源兄弟们。

       以下目录展示了部分书单内容,码剖以供参考:

       Java

       - 天学通Java

       - Effective Java中文版(第2版)

       - Head First Java 中文高清版

       - EXPERT.ONE.ON.ONE.J2EE.DEVELOPMENT.WITHOUT.EJB-中文

       - Java 程序员进阶之路(亮白版)

       - Hibernate实战(第2版)

       - Java 8 实战

       - Java8函数式编程

       - Java8中的应用源炫酷特性和Java9中的新特性-杨晓峰

       - JavaNIO(中文版)

       - JAVA优化编程

       - Java加密与解密的艺术 梁栋

       - Java基础与案例开发详解

       - Java学习路线图:Java必须知道的个问题

       - Java并发编程的艺术

       - JVM

       - Java虚拟机基础教程 高清中文版PDF

       - Java虚拟机并发编程

       - Java虚拟机规范(Java SE 8版)(带书签完整版)

       - 实战JAVA虚拟机 JVM故障诊断与性能优化

       - 揭秘Java虚拟机-JVM设计原理与实现

       - 深入理解Java虚拟机JVM高级特性与最佳实践第3版(周志朋)

       - 解析Java虚拟机器开发:权衡优化、高效和安全的码剖最优方案

       Kubernetes

       - Kubernetes实战 ,吴龙辉 ,P

       - Kubernetes开源书

       - Kubernetes指南(Kubernetes Handbook)

       - Kubernetes权威指南第2版

       - Kubernetes经典实例

       - 阿里云深入浅出Kubernetes项目实战手册

       - 基于Kubernetes的容器云平台实战

       Linux

       - linux常用命令大全

       - Linux宝典

       - Linux环境编程:从应用到内核

       - LINUX防火墙(原书第3版)

       - Linux高级程序设计中文第三版杨宗德--人电出版社

       - [Linux命令详解词典].施威铭研究室.扫描版

       - 深入Linux内核架构 (图灵程序设计丛书·LinuxUNIX系列)

       - 鸟哥的LINUX私房菜_基础学习篇(第三版)

       - 鸟哥的LINUX私房菜:服务器架设篇 (第二版)

       MyBatis

       - MyBatis从入门到精通

       - Spring+MVC+MyBatis企业应用实战

       - MyBatis技术内幕

       - 深入浅出MyBatis技术原理与实战

       - Spring+MyBatis企业应用实战

       Netty

       - Netty实战中文高清版

       - Netty权威指南 第2版 带书签目录 完整版

       - Netty进阶之路 跟着案例学Netty_完整版

       Redis

       - Redis入门指南 第2版

       - Redis实战

       - Redis开发与运维-付磊

       - Redis深度历险:核心原理和应用实践

       - redis设计与实现

       - 深入理解Redis

       Spring

       - Spring Security实战 - 陈木鑫

       - Spring.2.0核心技术与最佳实践.廖雪峰.扫描版

       - Spring从入门到精通

       - Spring5高级编程

       - Spring实战(第4版文字版)

       - Spring揭秘

       - Spring源码深度解析

       - spring高级程序设计

       Spring Boot

       - Spring Boot 2+Thymeleaf企业应用实战

       - Spring技术内幕:深入解析Spring架构与设计原理

       - 精通spring - Mastering Spring

       - Spring Boot 2精髓(高清版)

       - Spring Boot企业级应用开发实战

       - Spring Boot+Vue全栈开发实战

       - Spring Boot开发实战

       - SpringBoot揭秘+快速构建微服务体系

       - 微服务实战:Dubbox+Spring Boot+Docker

       - 一步一步学Spring Boot 2微服务项目实战

       - 微服务架构实战 基于Spring Boot Spring Cloud Docker

       - 微服务架构基础(Spring Boot+Spring Cloud+Docker)

       - 深入实践Spring Boot.陈韶健

       Spring Cloud

       - Spring Cloud 微服务架构进阶

       - Spring Cloud与Docker高并发微服务架构设计实施

       - Spring Cloud与Docker微服务架构实战

       - Spring Cloud微服务全栈技术与案例解析

       - Spring Cloud微服务实战

       - Spring Cloud微服务架构开发实战

       - 疯狂Spring Cloud微服务架构实战

       - 重新定义Spring Cloud实战

       Zookeeper

       - Zookeeper 分布式过程

       - 从Paxos到Zookeeper 分布式一致性原理与实践

       其他

       - tomcat内核设计剖析

       - 大数据之路:阿里巴巴大数据实践

       - Hadoop大数据分析与挖掘实战

       - Git入门与实践完整版

       - Hadoop权威指南(第2版)

       - 构建工具

       - Maven实战

       - 架构

       - App后台开发运维和架构实践

       - 亿级流量网站架构核心技术

       - 数据结构和算法

       - Docker全攻略

       - Elasticsearch大数据搜索引擎

       - Git版本控制管理第2版(美)罗力格

       - Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理

       - Hadoop技术内幕+深入理解MapReduce架构设计与实现原理

       - Hadoop技术内幕深入解析YARN架构设计与实现原理

       - 大话数据结构

       - 算法导论

       - Git权威指南-目录完美-完整版

       - 大话设计模式

       - 设计模式

       - 大厂笔试真题+答案

       - 人件(高清中英文合并版)

       - 代码整洁之道

       - 多处理器编程的艺术

       - 程序开发心理学(银年纪念版)

       - 计算机程序设计艺术(第一卷)高清中文版

       - 编程之美-完整版

       - 计算机程序设计艺术(第三卷)高清中文版

       - 计算机程序设计艺术(第二卷)高清中文版

RocketMQ路由中心 NameServer

       专栏:深入分布式开发 杨京京:深入分布式开发

       RocketMQ路由中心 NameServer

       NameServer是RocketMQ的“大脑”,主要负责RocketMQ的应用源路由管理、服务注册及服务发现的码剖h5币圈源码完整版机制。

       NameServer是应用源简单的Topic路由注册中心,主要有两个功能:Broker管理:Broker启动时会将自己的注册消息提供给NameServer,包括Broker地址、Broker名字、Broker Id、topic配置信息等作为路由信息的基本数据,提供心跳检测机制检测Broker是否存活。每个NameServer保存Broker集群服务器的所有路由信息,提供给生产者和消费者获取路由信息,获取到路由信息就可以与Broker服务进行消息的投递和消费。路由信息管理:每个NameServer保存Broker集群服务器的所有路由信息,提供给生产者和消费者获取路由信息,获取到路由信息就可以与Broker服务进行消息的最新内付暗雷源码商业版投递和消费。由于每个NameServer都保存着完整的路由信息,即使一台NameServer服务下线了,生产者和消费者也能从其他的NameServer服务器获取到完整Broker路由细信息。

       消息中间件的设计思路一般基于主题的订阅发布机制,消息生产者(Producer)发送某一主题的消息到消息服务器,消息服务器负责该消息的持久化存储,消息消费者(Consumer)订阅感兴趣的主题,消息服务器根据订阅信息(路由信息)将消息推送到消费者(PUSH模式)或者消息消费者主动向消息服务器拉取消息(PULL模式),从而实现消息生产者与消息消费者解耦。为了避免消息服务器的单点故障导致的整个系统瘫痪,通常会部署多台消息服务器共同承担消息的存储。那消息生产者如何知道消息要发往哪台消息服务器呢?如果某一台消息服务器宕机了,那么生产者如何在不重启服务的通达信源码编辑自动生成器情况下感知呢?NameServer就是为了解决上述问题而设计的。

       Broker消息服务器在启动时向所有NameServer注册,消息生产者(Producer)在发送消息之前先从NameServer获取Broker服务器地址列表,然后根据负载算法从列表中选择一台消息服务器进行消息发送。NameServer与每台Broker服务器保持长连接,并间隔s检测Broker是否存活,如果检测到Broker宕机,则从路由注册表中将其移除。但是路由变化不会马上通知消息生产者,为什么要这样设计呢?这是为了降低NameServer实现的复杂性,在消息发送端提供容错机制来保证消息发送的高可用性。

       NameServer本身的高可用可通过部署多台NameServer服务器来实现,但彼此之间互不通信,也就是二次元发卡网源码开源NameServer服务器之间在某一时刻的数据并不会完全相同,但这对消息发送不会造成任何影响,这也是RocketMQ NameServer设计的一个亮点,RocketMQ NameServer设计追求简单高效。

       了解完NameServer的架构,接下来结合源码的方式从下面几方面来详细剖析下NameServer:NameServer的启动过程分析

       NameServer作为Broker管理和路由信息管理的服务器,首先需要启动才能为Broker提供注册topic的功能、提供心跳检测Broker是否存活的功能、为生产者和消费者提供获取路由消息的功能,NameServer服务器相关的源码在namesrv模块下,目录结构如下:

       NameServer启动类:org.apache.rocketmq.namesrv.NamesrvStartup。NamesrvStartup类就是NameServer服务器启动的启动类。

       NamesrvStartup类中有一个main启动类,main方法调用main0,main0主要流程代码(删除无关紧要或者不影响逻辑的代码,接下来所有有关源码的分析都只会分析主要流程,并且源码的分析采用从上到下,从宏观到微观的方法)如下:

       main0方法的主要作用就是创建Name Server服务器的控制器,并且启动Name Server服务器的控制器。NamesrvController类的作用就是为Name Server服务的启动提供具体的逻辑实现,主要包括配置信息的加载、远程通信服务器的创建和加载、默认处理器的注册以及心跳检测机器监控Broker的健康状态等。Name Server服务器的控制器的创建方法为createNamesrvController方法,createNamesrvController方法的主要流程代码如下:

       createNamesrvController方法主要做了几件事,读取和解析配置信息,包括Name Server服务的配置信息、Netty服务器的配置信息、打印读取或者解析的配置信息、保存配置信息到本地文件中,以及根据namesrvConfig配置和nettyServerConfig配置作为参数创建nameServer服务器的控制器。创建好Name server控制器以后,就可以启动它了。启动Name Server的方法的主流程如下:

       start方法没什么逻辑,主要作用就是进行初始化工作,然后进行启动Name Server控制器,接下来看看进行了哪些初始化工作以及如何启动Name Server的,初始化initialize方法的主要流程如下:

       initialize方法的主要逻辑如下:

       上面就是initialize方法的主要逻辑,特别需要注意每秒扫描不活跃的broker的定时任务:

       scanNotActiveBroker方法的逻辑主要是遍历缓存在brokerLiveTable的Broker,将Broker最后更新时间加上秒的结果是否小于当前时间,如果小于当前时间,说明Broker已经过期,可能是已经下线了,所以可以清除Broker信息,并且关闭Name Server服务器与Broker服务器连接,这样被清除的Broker就不会与Name Server服务器进行远程通信了。brokerLiveTable的结果如下:

       brokerLiveTable缓存着以brokerAddr为key(Broker地址),以BrokerLiveInfo为value的结果,BrokerLiveInfo是Broker存活对象,主要有如下几个属性:

       从BrokerLiveInfo中删除了过期的Broker后,还需要做清理Name Server服务器与Broker服务器的连接,onChannelDestroy方法主要是清理缓存在如下map的信息:

       在扫描过期的broker时,首先找到不活跃的broker,然后onChannelDestroy方法清理与该不活跃broker有关的缓存,清理的主要流程如下:

       初始化nameserver服务器以后,接下来就可以启动nameserver服务器:

       start方法做了两件事,第一件就是启动netty服务器,netty服务器主要负责与Broker、生产者与消费者之间的通信,处理Broker、生产者与消费者的不同请求。根据nettyConfig配置,设置启动的配置和各种处理器,然后采用netty服务器启动的模板启动服务器,具体的代码就不分析了,有兴趣的可以看看netty启动代码模板是怎么样的。第二件事就是启动文件监听线程,监听tts相关文件是否发生变化。

       Name Server服务器启动流程的源代码分析到此为止了,在这里总结下Name Server服务器启动流程主要做了什么事:

更多相关资讯请点击【焦点】频道>>>