皮皮网

【单品商城源码】【聚类集成源码】【遗传规划matlab源码】netty应用与源码剖析

2024-11-18 17:27:44 来源:无未来函数金波段指标源码

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

netty应用与源码剖析

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

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

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

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

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

       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的应用源路由管理、服务注册及服务发现的码剖聚类集成源码机制。

       NameServer是应用源简单的Topic路由注册中心,主要有两个功能:Broker管理:Broker启动时会将自己的注册消息提供给NameServer,包括Broker地址、Broker名字、Broker Id、topic配置信息等作为路由信息的基本数据,提供心跳检测机制检测Broker是否存活。每个NameServer保存Broker集群服务器的所有路由信息,提供给生产者和消费者获取路由信息,获取到路由信息就可以与Broker服务进行消息的投递和消费。路由信息管理:每个NameServer保存Broker集群服务器的所有路由信息,提供给生产者和消费者获取路由信息,获取到路由信息就可以与Broker服务进行消息的遗传规划matlab源码投递和消费。由于每个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服务器启动流程主要做了什么事: