Nacos1.x配置中心客户端长轮询原理

nacos配置中心帮助我们很好的管理各服务中的配置文件,同时动态刷新机制很好的解决了配置文件变更后需要重启的问题。所以本文从客户端起点开始窥探具体实现原理。

1. 什么是长轮询

要搞懂Nacos注册中心原理,最重要的是搞清楚什么是长轮询,注册中心就是用长轮询的机制去获取最新配置信息,而长轮询和长连接有什么区别呢?

原理 优点 缺点
轮询 客户端定时向服务端请求,响应后立刻返回关闭连接 服务端编写简单,单一请求响应 浪费带宽和服务器资源
长轮询 客户端向服务端请求,服务端会在有新数据时候响应,否则会在一定时间后返回 避免频繁无效请求 无法保证数据顺序
长连接 一直保持连接不断开 消息通讯及时 维护长连接增加开销
Nacos长轮询

在这里插入图片描述
从上图可以得知几个关键:

  1. nacos长轮询超时时间是30s,实际是客户端每隔30s会发送一次请求,而服务端若无数据变更会在29.5s时候响应。
  2. nacos管理后台通过推送配置方式将最新变更发送到服务端。
具体细节
  • 客户端发起长轮询
    客户端发起一个 HTTP 请求,请求信息包含配置中心的地址,以及监听的 dataId(本文出于简化说明的考虑,认为 dataId 是定位配置的唯一键)。若配置没有发生变化,客户端与服务端之间一直处于连接状态。
  • 服务端监听数据变化
    服务端会维护 dataId 和长轮询的映射关系,如果配置发生变化,服务端会找到对应的连接,为响应写入更新后的配置内容。如果超时内配置未发生变化,服务端找到对应的超时长轮询连接,写入 304 响应。
    304 在 HTTP 响应码中代表“未改变”,并不代表错误。比较契合长轮询时,配置未发生变更的场景。
  • 客户端接收长轮询响应
    首先查看响应码是 200 还是 304,以判断配置是否变更,做出相应的回调。之后再次发起下一次长轮询。
  • 服务端设置配置写入的接入点
    主要用配置控制台和 client 发布配置,触发配置变更

2.SpringCloud配置中心原理

1.PropertySourceBootstrapConfiguration

该类是配置入口类,用于解析配置文件,我们先观察该类的继承关系。
在这里插入图片描述
可以发现该类是一种ApplicationContextInitializer,而initializer是在prepareContext中进行初始化调用的。

可以观察到在initialize的时候会用PropertySourceLocator进行配置获取。

在这里插入图片描述

2.PropertySourceLocator

上文得知PropertySourceLocator就是Spring Cloud获取配置的类,那我们看一下Nacos是如何注入的。

这个时候我们可以去nacos config自动配置文件里找一下。
在这里插入图片描述

果然,我们可以看到在NacosConfigBootstrapConfiguration配置了我们需要的nacos实现类NacosPropertySourceLocator。接着我们继续往其实现方法locate中看。

3.NacosConfigService

从locate往里进入最后定位到ConfigFactory::createConfigService,顾名思义该方法用于创建配置中心。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值