02 2023 档案
摘要:1 在完成服务注册之后,会将注册信息同步给群里中的其他节点,以实现高可用,续约,服务更新,下线都是一样的操作 2 拿到集群中其他节点的url信息,同步数据 3 执行批处理任务,batchingDispatcher是在下面这个点进行的初始化,用的是子类 AcceptorExecutor 4 执行这个p
阅读全文
摘要:1 多级缓存入口 2 初始化缓存 3 二级缓存(读写缓存)readWriteCacheMap,每隔180s就会主动过期 4 一级缓存(只读缓存)readOnlyCacheMap,每隔30s自动刷新一次(定时过期) 5 比较只读缓存和读写缓存,如果不一致,就覆盖只读缓存(被动过期)
阅读全文
摘要:1 自我保护机制入口 2 自我保护机制,每15min执行一次 3 更新每分钟期望的心跳数 = 当前所有实例数 * 2更新保护机制阈值 = 当前所有实例数 * 2 * 0.85 4 每隔1min调度一次EvictionTask这个任务 5 针对网络延迟进行补时计算 6 自我保护机制核心逻辑 7 如果触
阅读全文
摘要:1 每隔1min调度一次EvictionTask这个任务,感知是否有实例故障,并摘除 eureka-server初始化完成,进入下面这个方法 registry.openForTraffic(applicationInfoManager, registryCount); 继续调用父类方法super.p
阅读全文
摘要:1 client正常下线之前,会调用这个关闭的方法 2 释放线程池等资源 3 将实例状态设置为down,发送http请求调用server的cancel()方法 4 释放网络等资源
阅读全文
摘要:1 后台启动一个线程每隔30s去抓取注册表 在client初始化过程中,如果需要抓取注册表,就会启动一个后台线程每隔30s定时刷新注册表信息 2 发送http请求抓紧增量注册表 3 获取增量注册表 4 如果获取的增量注册表为空,就抓取一次全量注册表 5 将增量注册表合并到本地,获取对应的hashCo
阅读全文
摘要:1 后台启动一个线程每隔30s去发送心跳 在client初始化过程中,如果需要发起注册,就会启动一个timer每隔30s向server发送心跳 2 调用http请求发送续约信息,如果续约成功,更新最近续约的时间 3 续约的核心就是更新最新的这个时间戳 + 有效期(这儿其实不应该加的) server端
阅读全文
摘要:注册表的数据结构就是一个ConcurrentHashMap,服务的注册,查看,更新,下线都是围绕着这个map进行的 大概的数据内容就是下面这个样子: { "serviceA": { "ioooo1": { "appName": "", "ipAddr": "" }, "ioooo2": { "app
阅读全文
摘要:1 实例化EurekaInstanceConfig对象instanceConfig 2 先初始化InstanceInfo对象,再基于构建好的instanceConfig和instanceInfo构建applicationInfoManager对象 3 初始化eurekaClientConfig对象(
阅读全文
摘要:一、依赖分析 查看build.gradle看到,eureka-server主要依赖了eureka-client和eureka-core2个项目,jersey框架和jetty容器 二、代码结构分析 通过看eureka-server的代码结构,能够看出这是一个web工程,包含了3个properties配
阅读全文
摘要:上面就是eureka大体的功能脉络 eureka-server 源码分析,从以下几个方面入手: 1 - server启动过程源码剖析 2 - client启动过程源码剖析 3 - 注册表数据结构源码剖析 4 - 心跳源码源码剖析 5 - 定时抓取增量注册表源码剖析 6 - 服务下线源码剖析 7 -
阅读全文