Spring Cloud Alibaba 读书笔记_5:统一配置管理

统一配置管理

配置的CURD

Nacos Config 针对配置管理提供了四种操作,配置方法存在于 com.alibaba.nacos.api.config.ConfigService 中。

  • 获取配置:从 Nacos Config Server 中读取配置

String getConfig(String dataId, String group, long timeoutMs) throws NacosException;

  • 监听配置:订阅监听的配置,当配置发生变化后会收到事件通知

void addListener(String dataId, String group, Listener listener) throws NacosException;

  • 发布配置:将配置保存到 Nacos Config Server

boolean publishConfig(String dataId, String group, String content) throws NacosException;

  • 删除配置:删除配置中心的制定配置

boolean removeConfig(String dataId, String group) throws NacosException;

动态监听

当 Nacos Config Server 上的配置发生变化时,需要通知相关的服务或应用感知变化。通常客户端和服务端之间数据交互方式包含两种: pullpush 。前者表示客户端从服务端主动拉取数据,后者表示服务端主动把数据推送到客户端。

对于 pull ,客户端需要定时从服务端拉取一次数据,由于定时任务会存在一定的时间间隔,不能保证数据的实时性。而且在服务端配置长时间不更新的情况下,客户端的定时任务会做一些无用的拉取操作,是一种对资源的浪费。

对于 push ,服务端需要维持与客户端的长连接,如果客户端数量较多,服务端需要耗费大量的内存资源来保存每个连接,而且为了检测连接有效性,还需要心跳机制来维持每个连接的状态。

Nacos采用的是 pull 模式,是一种长轮训机制,结合上述两种模式的优势。客户端采用长轮训的方式定时发送 pull 请求,去检查服务端的配置信息是否发生了变更,如果发生了变更,则客户端会根据变更的数据获得最新的配置。如果没有发生变更,服务端会先Hold住这个请求,即服务端接收此请求后在指定时间段内(长连接会话超时时间默认为30S)一直不返回结果,直到这段时间内配置发生变化,服务端会把原来Hold住的请求进行返回。
在这里插入图片描述

Nacos 服务端收到请求之后,先检查配置是否发生了变更,若没有,则设置一个定时任务,延时29.5S执行,并且把当前的客户端长轮训连接加入AllSubs队列,此时存在两种方式触发连接结果的返回。

  • 等待29.5S(长连接保持时间)后触发自动检查机制,无论配置有无变化,都将结果返回客户端。
  • 在29.5S的长连接保持时间内的任意一个时刻,通过Nacos DashBoard 或 API 方式对配置进行了修改,会触发配置事件的更新,监听到该时间的任务会遍历AllSubs队列,找到发生变更的配置项对应的ClientLongPolling任务,将变更的数据通过该任务的连接进行返回,完成一次推送操作。

猜你喜欢

转载自blog.csdn.net/Nerver_77/article/details/108364234