结论:
使用长轮询的方式实现,线程每次同步后会睡眠5分钟(默认)
核心源码
RemoteConfigRepository中的三条
this.trySync(); this.schedulePeriodicRefresh(); this.scheduleLongPollingRefresh();
创建时会使用schedulePeriodicRefresh创建定时任务的线程,每5分钟调用
AbstractConfigRepository的trySync方法,trySync实现对于本地文件和远程服务端文件有不同实现,目前只看了remote远程服务的,RemoteConfigRepository的loadApolloConfig就是用http请求获取的内容,代码类似于scheduleLongPollingRefresh这个函数方法,总体就是通过httpclient构造http请求来获取服务端配置中心的数据
由于有个需求,需要使用netty开发一个代理服务器,相当于中间层,用来把客户端和配置中心进行隔离,代理服务器把客户端请求转发给服务端,然后再把数据返回去。为了获取http请求,所以看一下这里的代码,采用了debug+看源码方式相结合的方式。
看到有secret的密文的方式,用于防止伪造的客户端请求,这里代理服务器应该不会有太大问题,因为相当于内部转发,不是伪造,后续使用的时候再试一下。