前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一图理解Apollo配置中心,配置变更如何及时通知客户端的

一图理解Apollo配置中心,配置变更如何及时通知客户端的

作者头像
崔认知
发布2023-10-25 19:06:57
7070
发布2023-10-25 19:06:57
举报
文章被收录于专栏:nobodynobody

Apollo 2.2.0-SNAPSHOT

配置变更及时通知客户端流程:

1、Apollo客户端启动时,会启动异步线程,循环发起一个Http Long Polling请求到Config Service的notifications/v2接口(NotificationControllerV2),http请求超时默认90 秒(should be longer than server side's long polling timeout, which is now 60 seconds)。

(com.ctrip.framework.apollo.internals.RemoteConfigRepository#RemoteConfigRepository)

(com.ctrip.framework.apollo.internals.RemoteConfigLongPollService#startLongPolling)

(com.ctrip.framework.apollo.internals.RemoteConfigLongPollService#doLongPollingRefresh)

2、Config Service的notifications/v2接口接收到客户端上面发起的请求,不会立即返回结果,而是通过Spring DeferredResult把请求挂起

如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端。

Config Service会把DeferredResult放到本地缓存中

代码语言:javascript
复制
private final Multimap<String, DeferredResultWrapper> deferredResults =
      Multimaps.synchronizedSetMultimap(TreeMultimap.create(String.CASE_INSENSITIVE_ORDER, Ordering.natural()));

其中key为客户端请求相关信息拼接的key。变更通知时会根据key从缓存中获取DeferredResult,设置值,让挂起的请求返回给客户端,达到通知客户端的功能

(com.ctrip.framework.apollo.configservice.controller.NotificationControllerV2#pollNotification)

3、如果Admin Service配置发布时,会把更新通知消息入库

(com.ctrip.framework.apollo.adminservice.controller.ReleaseController#updateAndPublish)

(com.ctrip.framework.apollo.biz.message.DatabaseMessageSender#sendMessage)

4、Config Service后台异步线程默认每秒扫描更新通知消息表,如果有配置发布动作,会从步骤2中的DeferredResult缓存获取对应的DeferredResult,并让NotificationControllerV2会调用DeferredResult的setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回。客户端从返回的结果中获取到配置变化的namespace后,会立即请求Config Service获取该namespace的最新配置。

(com.ctrip.framework.apollo.configservice.ConfigServiceAutoConfiguration.MessageScannerConfiguration#releaseMessageScanner)

(com.ctrip.framework.apollo.configservice.controller.NotificationControllerV2#handleMessage)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 认知科技技术团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档