11292327
问:客户端发请求给Nacos服务端,服务端这边会进行哪些处理?
答:客户端发请求给Nacos 服务端 ,服务端这边通过ConfigController类的309行的listener方法,进行处理
第一步 获取客户端请求的文件的md5值,查看是否发生变化,若发生md5值发生变化,则说明对应的配置文件发生了变化
然后在ConfigController类的328行做长轮询 执行inner.doPollingConfig()方法
doPollingConfig()方法在ConfigServletInner类的78行,其中调用了addLongPollingClient方法
addLongPollingClient方法在LongPollingService类的240行
其中定义了delayTime,固定延迟时间500毫秒
定义timeout,超时时间,值为29.5秒
然后是LongPollingService类的260行的MD5Util.compareMd5()方法,比较客户端的md5和server端的是否一致,不一致的返回到changeGroups,生成响应信息返回。
11300008
不想做笔记了 质量不高 中间有些没有连接上的,有时间,有心情了,再做吧
LongPollingService类的415行 run()方法里,创建一个Runnable()线程
在这个线程中,在LongPollingService类423行,将当前的ClientLongPolling移出去,因为时间到了
然后在LongPollingService类的440行,直接进行返回,虽然源代码里边有检查的代码,但是并不会运行到那里去,实际上是直接走else里的内容,进行返回了。
12011448
下一步 在29秒内发生了变化,要怎么处理?
发布配置
dashboard发了一个post配置过来,带着三个参数dataid 配置ID gruop配置分组 content 配置内容
来到ConfigController.java的122行的publishConfig()方法
继续往下走,在168行,调用insertOrUpdate()方法,进行持久化,有嵌入式存储和外部存储
存完了之后,调用ConfigDataChangeEnent()方法,发布一个配置改变的事件。
当触发LocalDataChangeEvent事件时,调用DataChangeTaskren任务
这些都是服务端做的事情,在LongPollingService.javad的459行,有个sendResponse()方法,作用是删除队列中的ClientLongPolling,防止数据推送完毕,时间到期后还要再检查一遍。
下一步,从队列里边把要改的配置找出来,进行修改