首页 > 图灵资讯 > java面试题>正文
Nacos配置中心长轮询机制?
2024-03-19 13:11:30
一般来说客户端和服务端的交互分为两种:推(Push)和拉(Pull),Nacos在Pull的基础上,采用了长轮询来进行配置的动态刷新。
在长轮询模式下,客户端定时向服务端发起请求,检查配置信息是否发生变更。如果没有变更,服务端会"hold"住这个请求,即暂时不返回结果,直到配置发生变化或达到一定的超时时间。
具体的实现过程如下:
Nacos长轮询
- 如果客户端发起 Pull 请求,服务端收到请求之后,先检查配置是否发生了变更:
- 变更:返回变更配置;
- 无变更:设置一个定时任务,延期 29.5s 执行,把当前的客户端长轮询连接加入 allSubs 队列;
- 在这 29.5s 内的配置变化:
- 配置无变化:等待 29.5s 后触发自动检查机制,返回配置;
- 配置变化:在 29.5s 内任意一个时刻配置变化,会触发一个事件机制,监听到该事件的任务会遍历 allSubs 队列,找到发生变更的配置项对应的 ClientLongPolling 任务,将变更的数据通过该任务中的连接进行返回。相当于完成了一次 PUSH 操作;
- 长轮询机制结合了 Pull 机制和 Push 机制的优点;
通过长轮询的方式,Nacos客户端能够实时感知配置的变化,并及时获取最新的配置信息。同时,这种方式也降低了服务端的压力,避免了大量的长连接占用内存资源。