Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

监听配置

原理官网已经说了很清除了,不过我们还是看下源码,前面的客户端长轮询任务说过,会被服务器挂起,现在我们看服务器源码,看为什么会挂起,挂起当中如果有配置改变又是如何立即响应的。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

客户端的LongPollingRunnable

这个已经讲过了,他会一直去请求监听端口,但是如果没有缓存配置是初始化的,就会被挂起,有配置修改会立即响应,否则就会立即返回。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一
这两个头信息很关键,会影响到服务端的处理,马上就说。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

服务端的ConfigController的listener

Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一
直接看关键的.

ConfigServletInner的doPollingConfig

Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

LongPollingService的isSupportLongPolling是否支持长轮询

就是客户端的头信息,上面就说了。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

LongPollingService的addLongPollingClient添加长轮询客户端

首先会看是否有不挂起的标志,也是客户端传来的,缓存配置初始化的时候就不挂起,否则会挂起。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

默认挂起时间29.5秒:
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一
如果支持固定轮询的话,最大是10秒挂起。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

检查MD5是否改变和不挂起情况

否则就比对客户端发来的MD5,是否有改变,有改变的话就立即生成响应,否则就判断是否有不挂起标记,有的话就直接返回,因为没有改变,也不挂起,就返回了。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一
返回成功。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

MD5没改变,要挂起的情况

创建一个异步的上下文,然后创建ClientLongPolling任务,将上下文,超时等信息封装进去,然后调度ClientLongPolling任务。
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一
调度器有个10秒间隔的任务StatTask,而且是单线程的,所以新的ClientLongPolling任务会排队,等待他完成后才会调度,所以最长要等10秒会进行处理:
Spring Cloud 2.2.2 源码之五十一nacos服务端处理监听配置请求一

下篇说ClientLongPolling里干了什么。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。