Value 中的 value 是 具体的服务节点信息 也就是 Lease<InstanceInfo>里面存放的是你设定
的具体实例信息
首 先 , 注 册 表 根 据 微 服 务 的 名 称 或 取 Map, 如 果 不 存 在 就 新 建 , 使 用 putIfAbsent。
然 后 , 从 gMap( gMap 就 是 该 服 务 的 实 例 列 表 ) 获 取 一 次 服 务 实 例 , 判 断 这 个 微 服 务 的 节 点 是 否 存 在 , 第 一 次 注 册 的
情 况 下 一 般 是 不 存 在 的 。
当 然 , 也 有 可 能 会 发 生 注 册 信 息 冲 突 时 , 这 时 Eureka 会 根 据 最 后 活 跃 时 间 来 判 断 到 底 覆 盖 哪 一 个 :
这 段 代 码 中 , Eureka 拿 到 存 在 节 点 的 最 后 活 跃 时 间 , 和 当 前 注 册 节 点 的 发 起 注 册 时 间 , 进 行 对 比 。 当 存 在 的 节 点 的 最
后 活 跃 时 间 大 于 当 前 注 册 节 点 的 时 间 , 就 说 明 之 前 存 在 的 节 点 更 活 跃 , 就 替 换 当 前 节 点 。
这 里 有 一 个 思 想 ,就 是 如 果 Eureka 缓 存 的 老 节 点 更 活 跃 , 就 说 明 它 能 够 使 用 , 而 新 来 的 服 务 我 并 不 知 道 是 否 能 用 , 那
么 Eureka 就 保 守 的 使 用 了 可 用 的 老 节 点 , 从 这 一 点 也 保 证 了 可 用 性 。
也 就 是 已 经 存 在 的 节 点 发 送 消 息 的 时 间 与 现 在 的 时 间 更 加 接 近 ,就 说 明 已 经 存 在 的 节 点 更 加 活 跃 .
之后在 拿 到 服 务 实 例 后 对 其 进 行 封 装 :
Lease 是 一 个 心 跳 续 约 的 包 装 类 ,里 面 存 放 了 注 册 信 息 ,最 后 操 作 时 间 ,注 册 时 间 ,过 期 时 间 ,剔 除 时 间 等 信 息 。在 这
里 把 注 册 实 例 及 过 期 时 间 放 到 这 个 心 跳 续 约 对 象 中 , 再 把 心 跳 续 约 对 象 放 到 gmap 注 册 表 中 去 。 之 后 进 行 改 变 服 务 状
态 , 系 统 数 据 统 计 , 至 此 一 个 服 务 注 册 的 流 程 就 完 成 了 。
注 册 完 成 后 , 查 看 一 下 registry 中 的 服 务 实 例 , 发 现 我 们 启 动 的 Eureka-client 都 已 经 放 在 里 面 了 :