Nacos – 启动提到了NacosWatch#start会获取NamingService,他托管NacosServiceManager来完成这件事。

NacosServiceManager#getNamingService

为空的时候,去创建一个NamingService

public NamingService getNamingService(Properties properties) {

// 为空的时候,去创建一个NamingService

if (Objects.isNull(this.namingService)) {

buildNamingService(properties);

}

// 返回namingService

return namingService;

}

NacosServiceManager#buildNamingService

加锁保证只能有一个namingService

private NamingService buildNamingService(Properties properties) {

if (Objects.isNull(namingService)) {

// 加锁保证只能有一个namingService

synchronized (NacosServiceManager.class) {

if (Objects.isNull(namingService)) {

namingService = createNewNamingService(properties);

}

}

}

return namingService;

}

最终调用NamingFactory#createNamingService来创建NamingService对象。

private NamingService createNewNamingService(Properties properties) {

try {

return createNamingService(properties);

}

catch (NacosException e) {

throw new RuntimeException(e);

}

}

// NacosFactory中的方法

public static NamingService createNamingService(Properties properties) throws NacosException {

return NamingFactory.createNamingService(properties);

}

NamingFactory#createNamingService

通过反射的方式创建了com.alibaba.nacos.client.naming.NacosNamingService对象。

public static NamingService createNamingService(String serverList) throws NacosException {

try {

Class> driverImplClass = Class.forName("com.alibaba.nacos.client.naming.NacosNamingService");

Constructor constructor = driverImplClass.getConstructor(String.class);

NamingService vendorImpl = (NamingService) constructor.newInstance(serverList);

return vendorImpl;

} catch (Throwable e) {

throw new NacosException(NacosException.CLIENT_INVALID_PARAM, e);

}

}

NacosNamingService#init

主要是初始化namespace、序列化、注册中心服务地址、WebRootContext上下文、缓存路径、日志名称、EventDispatcher、NamingProxy、BeatReactor、HostReactor。

EventDispatcher负责处理服务监听相关。

NamingProxy负责和Nacos服务的通信,比如服务注册、服务取消注册、心跳等。

BeatReactor负责检测心跳。

HostReactor负责获取、更新并保存服务信息。

private void init(Properties properties) throws NacosException {

ValidatorUtils.checkInitParam(properties);

// namespace默认public

this.namespace = InitUtils.initNamespaceForNaming(properties);

// 序列化初始化

InitUtils.initSerialization();

// 注册中心服务地址初始化,这个从配置文件取

initServerAddr(properties);

//初始化WebRootContext上下文

InitUtils.initWebRootContext();

// 初始化缓存路径 System.getProperty("user.home") + "/nacos/naming/" + namespace

initCacheDir();

// 初始化日志名称naming.log

initLogName(properties);

// 初始化EventDispatcher

this.eventDispatcher = new EventDispatcher();

// 初始化NamingProxy

this.serverProxy = new NamingProxy(this.namespace, this.endpoint, this.serverList, properties);

// 初始化BeatReactor

this.beatReactor = new BeatReactor(this.serverProxy, initClientBeatThreadCount(properties));

// 初始化HostReactor

this.hostReactor = new HostReactor(this.eventDispatcher, this.serverProxy, beatReactor, this.cacheDir,

isLoadCacheAtStart(properties), initPollingThreadCount(properties));

}

java service 初始化_【Java】Nacos – NacosNamingService初始化相关推荐

  1. java service包_利用 javaService 发布服务(jar包)

    jar在java中作为一种项目的发布形式比较普遍,往往为了容易管理更需要作为一种系统服务发布--起码服务器重启了不用人工去重新打开你所以往运行的jar文件. 这里简单的介绍下怎么将jar发布到winN ...

  2. Java Service Wrapper 发布Java程序为Windows服务

    下载Windows版本:https://www.krenger.ch/blog/java-service-wrapper-3-5-37-for-windows-x64/ 转自:F:\java\bhGe ...

  3. Java Service Wrapper将java程序设置为服务

    有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...

  4. java servlet类_[Java教程]与Servlet相关的类

    [Java教程]与Servlet相关的类 0 2017-08-31 17:00:15 有4个有关的类,通过servlet可以获得其中的三个,然后通过ServletConfig间接获取ServletCo ...

  5. java斗地主发牌_[Java源码]扑克牌——斗地主发牌实现

    --------------------------------------- --------------------------------------- ----------一个扑克牌核心和简单 ...

  6. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  7. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  8. java 文本压缩_[Java基础]Java使用GZIP进行文本压缩

    import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...

  9. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

最新文章

  1. protobuf和socket通信简单实例
  2. Hibernate智能化分页
  3. elasticsearch批量操作
  4. 本科生怎样发表论文?
  5. React Native之函数作为参数传递给另外一个函数去调用
  6. java工程引入scala_引入ReactiveInflux:用于Scala和Java的无阻塞InfluxDB驱动程序,支持Apache Spark...
  7. Science | 从结构生物学的角度理解人类mRNA剪接体分支位点的识别
  8. java语法结构库,万字解析!
  9. 使用AWS DMS 升级Postgre 10到12
  10. 如何在ogre游戏界面添加自己的信息,比如显示某变量的值
  11. crypto_policy_set_aes_cm_128_hmac_sha1_32/crypto_policy_set_aes_cm_128_hmac_sha1_80找不到
  12. Lesson 17.2 经典数据集(1):入门数据集,以及读数据时哪些可能的坑
  13. 分布式系统如何保证数据一致性
  14. no.10京东咚咚架构演讲读后感
  15. 【ZZULIOJ】1116: 删除元素
  16. win32gui操作
  17. How to craw the Info of BiliBIli with python
  18. 计算机派位录取,北京小升初派位入学随机录取志愿优先,与成绩无关
  19. https证书安装部署 https证书怎么安装
  20. C++小游戏之停电救援

热门文章

  1. 一个简单的网页抓取工具
  2. 使用GIT不小心merge后的回滚操作
  3. Storm Trident示例shuffleparallelismHint
  4. Spring笔记02(3种加载配置文件的方式)
  5. 使用FileSystem类进行文件读写及查看文件信息
  6. this compilation unit is not on the build of a java project
  7. 《剑指offer》第二十八题(对称的二叉树)
  8. 【js】实现 鼠标按下并未松开 事件
  9. ios swift 实现饼状图进度条,swift环形进度条
  10. myeclipse自带客户端连接mysql数据库