开发者社区> 问答> 正文

配置中心长轮询实现中实现服务端需要哪些说明?

配置中心长轮询实现中实现服务端需要哪些说明?

展开
收起
Aries- 2022-05-10 17:23:18 250 0
来自:阿里技术
1 条回答
写回答
取消 提交回答
  • @RequestMapping("/listener") ,配置监听接入点,也是长轮询的入口。在获取 dataId 之后,使用 request.startAsync 将请求设置为异步,这样在方法结束后,不会占用 Tomcat 的线程池。

    接着 dataIdContext.put(dataId, asyncTask) 会将 dataId 和异步请求上下文给关联起来,方便配置发布时,拿到对应的上下文。注意这里使用了一个 guava 提供的数据结构 Multimap<String, AsyncTask> dataIdContext ,它是一个多值 Map,一个 key 可以对应多个 value,你也可以理解为 Map<String,List> ,但使用 Multimap 维护起来可以更方便地处理一些并发逻辑。至于为什么会有多值,很好理解,因为配置中心的 Server 端会接受来自多个客户端对同一个 dataId 的监听。

    timeoutChecker.schedule() 启动定时器,30s 后写入 304 响应。再结合之前客户端的逻辑,接收到 304 之后,会重新发起长轮询,形成一个循环。

    @RequestMapping("/publishConfig") ,配置发布的入口。配置变更后,根据 dataId 一次拿出所有的长轮询,为之写入变更的响应,同时不要忘记取消定时任务。至此,完成了一个配置变更后推送的流程。

    2022-05-10 20:01:39
    赞同 展开评论 打赏
问答地址:
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
探索连接的最后十秒”落时”的网关 立即下载
基于RocketMQ Connect 构建全新数据流转处理平 立即下载
流量太大容易挂?接入 Sentinel 让 N 个 9 成为可能! 立即下载