【Spring Cloud Alibaba系列】 Nacos 动态监听模式

180 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

客户端和服务端之间数据交互有两种方式:

  • push:服务端主动把数据推送到客户端
  • pull:客户端从服务端主动拉取数据

Push模式:

服务端需要维持与客户端的长连接,如果客户端的数量比较多,那服务端需要消耗大量内存资源来保存每个连接信息,并且为了检测连接的有效性,还需要心跳机制来维护每个连接的状态。

Pull模式:

客户端需要定时从服务端拉取一次数据,定时任务会存在一定时间间隔,所以不能保证数据的实时性,并且在服务端配置长时间不修改时,客户端定时任务会做一些无用的Pull

Nacos采用的是Pull模式,是一种长轮询的机制,它结合了Push和Pull的优势,客户端采用长轮询的方式定时发起的Pull请求,去检查服务端配置信息是否发生了变化,如果发生了变化,则客户端会根据变更的数据获取最新配置,而长轮询,是客户端发起的轮询请求后,服务端如果有配置发生修改,就直接返回。

image-20211019221454309.png

客户端发起Pull请求后,发现服务端的配置和客户端的配置保持一致,那服务端会先hold住这个请求,就是服务端拿到这个连接后在指定时间内一直不返回结果,直到这段时间内配置发生变化,服务端会把原来的hold住的请求进行返回,Nacos 服务收到请求后,先检查配置是否发生了修改,如果没有,则设置一个定时任务,延迟29.5s执行,并且把当前的客户端长轮询连接加入allSubs队列。