深入理解Apollo核心机制之配置读取——轮询

前两篇内容
深入理解Apollo核心机制之配置读取——前言
深入理解Apollo核心机制之配置读取——ConfigService定时扫描

概述

读取配置除了默认5分钟间隔去轮询接口拉取配置,还有客户端主动长轮询ConfigService,等待通知后主动拉取配置。本文就看看客户端是如何开始客户端轮询的,以及轮询中的具体细节。

RemoteConfigRepository#RemoteConfigRepository(String namespace) 初始化工作

该构造函数会初始化命名空间,配置缓存等许多基本信息,同时有一步就是将自己(this)注册进RemoteConfigLongPollService,因为后续长轮询其实是该Service统一去做的。

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigRepository#scheduleLongPollingRefresh() 注册接口

m_namespace是在初始话的时候设置的,它表示该Repository所对应的命名空间。

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigLongPollService#submit(String namespace, RemoteConfigRepository remoteConfigRepository) 正式注册并开始开启长轮询准备工作

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigLongPollService#startLongPolling() 准备正式开启长轮询

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigLongPollService#doLongPollingRefresh(String appId,String cluster,String dataCenter) 长轮询开始

通过封装了Eureka的MetaService获取ConfigService集群,然后硬核负载均衡打到ConfigService的长轮询接口开始长轮询等待通知,如果关注的namespace有更新,则会做一些更新本地成员变量的操作,最重要的就是会通知相关的注册进来的Repository去主动拉取配置。这就是客户端长轮询等待通知,发现有配置更新后主动去拉取配置的一个基本流程。注意,当发送请求到长轮询接口的时候会被ConfigService hold住,直到响应或者超时。稍后再看NotificationControllerV2那边的流程。我们先关注客户端长轮询、获取通知、主动轮询拉取配置接口的过程。

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigLongPollService#notify(ServiceDTO lastServiceDTO, List notifications) 长轮询结果通知客户端

根据通知中传递的namespaceName,去之前注册的Repository集合Map拿到关注该namespaceName的Repository

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigRepository#onLongPollNotified(ServiceDTO longPollNotifiedServiceDto, ApolloNotificationMessages remoteMessages) 准备同步配置

深入理解Apollo核心机制之配置读取——轮询

AbstractConfigRepository#trySync() 准备同步配置

缓存中拿一份,远程拉取一份,比较后更新内存缓存。并通知

深入理解Apollo核心机制之配置读取——轮询

RemoteConfigRepository#loadApolloConfig() 拉取配置

拼接URL请求ConfigService接口拉取配置

深入理解Apollo核心机制之配置读取——轮询

AbstractConfigRepository#fireRepositoryChange(String namespace, Properties newProperties) 通知监听器配置改变(实时修改配置)

深入理解Apollo核心机制之配置读取——轮询

回到长轮询,话说客户端拼接请求打到ConfigService的NotificationControllerV2#pollNotification接口后是什么情况呢?

NotificationControllerV2#pollNotification 拉取(等待)通知

有一个Multimap

深入理解Apollo核心机制之配置读取——轮询

Original: https://www.cnblogs.com/deepSleeping/p/14565736.html
Author: DeepSleeping丶
Title: 深入理解Apollo核心机制之配置读取——轮询

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715057/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Ray Dalio《原则》

    原则(2011年Bridgewater出版的图书)_百度百科https://baike.baidu.com/item/原则/22147769 Ray Dalio《原则》和他的&#8…

    技术杂谈 2023年6月1日
    0102
  • 那些舍不得删除的 MP3–批量修改mp3的ID3tag

    整理电脑时发现很多mp3。那是大约2001年至2009年之间。那个时候大家听歌,还是习惯从网上下载mp3。虽然现在听歌比从前方便多了,简单到只需在APP中输入歌名,但用播放器听mp…

    技术杂谈 2023年6月21日
    067
  • cocos 动画系统

    前面的话 cocos 动画系统支持任意组件属性和用户自定义属性的驱动,再加上可任意编辑的时间曲线和移动轨迹编辑功能,就可以制作出各种动态效果 概述 Animation 组件可以以动…

    技术杂谈 2023年5月30日
    086
  • laravel的post请求分页数据

    一、总结 开始用paginate 后面用自己 二、laravel的post请求分页数据 操作真的非常简单 其实分页就是查两次表: 1、查总数目 2、查我们需要的数据,偏移offse…

    技术杂谈 2023年5月30日
    0104
  • 代码注释与Idea新文件创建

    注释 平时自己写代码,在代码量比较少时,还能看懂。但是如果是在公司就会需要看别人的代码,以及时间太久了忘记之前写的代码是什么目的了,那就需要用到注释了。 注释并不会被执行,是写给写…

    技术杂谈 2023年6月21日
    092
  • go入门项目:(3)Bookstore-REST-API

    CRUD API 添加书籍示例 [ { "id": "4", "title": "Rust权威指南"…

    技术杂谈 2023年7月24日
    068
  • KL散度(距离)和JS散度(距离)zz

    两者都可以用来衡量两个概率分布之间的差异性。JS散度是KL散度的一种变体形式。 KL散度:也称相对熵、KL距离。对于两个概率分布P和Q之间的差异性(也可以简单理解成相似性),二者越…

    技术杂谈 2023年5月31日
    095
  • []各手机厂商开放平台汇总

    [原创]各手机厂商开放平台汇总 1、vivo: https://dev.vivo.com.cn/home 2、华为 https://support.huaweicloud.com/…

    技术杂谈 2023年5月30日
    0123
  • 运用Spring Aop,一个注解实现日志记录

    运用Spring Aop,一个注解实现日志记录 1. 介绍 我们都知道Spring框架的两大特性分别是 IOC (控制反转)和 AOP (面向切面),这个是每一个Spring学习视…

    技术杂谈 2023年6月21日
    0111
  • 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈

    本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建。并完成SEO优化,打造一个炫酷博客。 本站基于HEXO+Gith…

    技术杂谈 2023年6月21日
    092
  • 源码级别的广播与监听实现

    原创:微信公众号 【阿Q说代码】,欢迎分享,转载请保留出处。 近期疫情形势严峻,情形不容乐观,周末也不敢出去浪了,躲在家里”葛优躺”。闲来无事,又翻了遍 S…

    技术杂谈 2023年7月11日
    079
  • Nginx-初识篇

    一、Nginx的简介 1. Nginx是什么 Nginx(engine x)是一个具有高性能的【HTTP】和【反向代理】的【Web服务器】,同时也是一个【POP3/SMTP/IMA…

    技术杂谈 2023年7月25日
    068
  • Node安装与卸载命令汇总

    nvm(MAC管理node版本) 安装最新稳定版node: nvm install stable 安装指定版本: nvm install <version></v…

    技术杂谈 2023年6月21日
    083
  • Love2D游戏引擎制作贪吃蛇游戏

    代码地址如下:http://www.demodashi.com/demo/15051.html Love2D游戏引擎制作贪吃蛇游戏 内附有linux下的makefile,windo…

    技术杂谈 2023年5月31日
    0122
  • 查看核数 内存 磁盘

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    078
  • 基于TLSR8359的2.4G私有协议多发一收方案解析

    一 简析 1.简介 泰凌微的2.4G私有协议芯片在市场应用十分广泛。 2.特性 无线传输距离远 功耗低,接口丰富 自带mcu功能,可实现mcu+2.4G的私有功能 二 源码解析 1…

    技术杂谈 2023年5月31日
    0127
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球