Nacos

一、同步配置(ConfigService)

Nacos客户端里负责配置同步的是NacosConfigService,它里面有一个ClientWorker。在nacos1.4里是有个executor线程池去跑checkConfigInfo()方法来长轮询拉取配置。nacos2.0,ClientWorker里面有个ConfigRpcTransportClientagent,他里面有个executor线程池,执行executeConfigListen()方法拉取配置。长轮询拉取配置的过程:
在一个死循环里,发送请求给nacos服务端去获取发生了变化的配置的changedGroupKeys(即namespace,groupid,dataid信息),如果获取到了,在用这些key去获取具体的配置。
这个请求发送到nacos服务端时,nacos服务端根据请求里的想要监听的配置计算一下MD5,跟服务端的数据对比一下,如果不一样,说明发生了变化,那就返回。否则创建一个任务(里面包含请求数据)放到一个集合allSubs里,然后通过定时器执行此任务,30s(isFixedPolling的话29.5s)后执行,将此任务移出allSubs,如果配置发生了变化,那就响应相应的key。这是服务端处理请求的逻辑,而在这30s之内,当服务端配置发生变化时,会发布一个事件,事件监听器在收到事件后,遍历allSubs,判断里面的请求的keys是否包含当前变化的key,如果有那就响应。

二、同步服务(NamingService)

  • 客户端发起事件订阅后,HostReactor中有UpdateTask线程,每10s发送一次Pull请求,获得服务端最新的地址列表
  • 服务端与服务提供者的实例之间维持了心跳检测,一旦服务提供者出现异常,则会发送一个Push消息给Nacos客户端,也就是服务消费者
  • 服务消费者收到请求后,使用HostReactor的processServiceJSON方法解析消息,更新本地服务地址列表。

参考资料

nacos - 周杰倫本人的专栏 - 掘金

你可能感兴趣的:(Nacos)