千家信息网

SEureka服务实例启动时是否会立刻向EurekaServer注册

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这期内容当中小编将会给大家带来有关SEureka服务实例启动时是否会立刻向EurekaServer注册,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基于Spring
千家信息网最后更新 2024年11月11日SEureka服务实例启动时是否会立刻向EurekaServer注册

这期内容当中小编将会给大家带来有关SEureka服务实例启动时是否会立刻向EurekaServer注册,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

基于SpringCloud-Dalston.SR5

Eureka服务实例启动时,是否会立刻向EurekaServer注册?

是的,立刻会。

EurekaClient在每次实例状态发生改变时,有一个Listener:

statusChangeListener = new ApplicationInfoManager.StatusChangeListener() {    @Override    public String getId() {        return "statusChangeListener";    }    @Override    public void notify(StatusChangeEvent statusChangeEvent) {        if (InstanceStatus.DOWN == statusChangeEvent.getStatus() ||                InstanceStatus.DOWN == statusChangeEvent.getPreviousStatus()) {            // log at warn level if DOWN was involved            logger.warn("Saw local status change event {}", statusChangeEvent);        } else {            logger.info("Saw local status change event {}", statusChangeEvent);        }//这个会触发调用register接口将实例信息注册上去        instanceInfoReplicator.onDemandUpdate();    }};

实例初始化完毕时,会发送一个状态为UP的事件,触发这个Listener(状态从STARTING变成UP ):

@Overridepublic void register(EurekaRegistration reg) {   maybeInitializeClient(reg);   if (log.isInfoEnabled()) {      log.info("Registering application " + reg.getInstanceConfig().getAppname()            + " with eureka with status "            + reg.getInstanceConfig().getInitialStatus());   }   reg.getApplicationInfoManager()         .setInstanceStatus(reg.getInstanceConfig().getInitialStatus());   if (reg.getHealthCheckHandler() != null) {      reg.getEurekaClient().registerHealthCheck(reg.getHealthCheckHandler());   }}

那么,官网这两个配置有啥用: 其实这个Initially是另外一个逻辑,就是在应用启动40s后,检查实例信息是否老旧,或者第一次注册是否失败,如果失败,就再次注册。之后每隔30s执行一次这个任务

EurekaServer集群内部信息如何同步?

首先,EurekaClient会选择eureka.client.service-url.defaultZone配置的第一个EurekaServer,之后如果和这个EurekaServer没有网络问题,就会一直用这个。 在EurekaClient向EurekaServer发送注册,下线,心跳,状态改变等一切事件时,这些会在EurekaServer上面同步到集群(EurekaServer集群配置就是eureka.client.service-url.defaultZone,集群内每个EurekaServer)的所有Server上

这样的机制有没有问题?

  1. 这个同步到其他EurekaServer与本次EurekaClient请求是否是同步的? 不是同步的,例如注册到EurekaServerA,EurekaServerA将注册请求同步到EurekaServerB与当前注册请求是异步的

  2. 某次异步同步请求失败如何补偿? 例如服务实例A注册到EurekaServerA,但是同步到EurekaServerB失败。这时EurekaServerB就没有这个实例,在下次A心跳时,EurekaServerA同步心跳请求到EurekaServerB时,会返回404,触发重新注册 推论: 为了减少和均匀EurekaServer压力和访问便利,我们对于每个微服务的不同实例,配置Eureka集群都要写的顺序不一样,和自己网段一样的写的靠前

网络抖动时,导致访问到另一个Eureka,重启才能恢复。。。

服务实例怎么过期?

通过EurekaServer内部定时检查过期实例任务,扫描Registry里面过期的实例并删除,并且使对应的ReadWriteMap缓存失效 注意,ReadOnlyMap里面的并不会立刻失效,而是通过下一个只读缓存刷新从ReadWriteMap刷到ReadOnlyMap感知变化。因为EurekaClient获取实例信息只从ReadOnlyMap读取,所以EurekaClient感知变化也会有这个延迟

为何EurekaServer挂了,客户端依然可以调通?

SpringCloud环境下,EurekaClient有缓存,Ribbon对于调用的服务列表也有缓存,所以可以继续调用,但不会更新服务与实例列表了。 根据Eureka的self-preservation的设计思路,可以理解这种设计也是符合Eureka初衷的(CAP中的A)

上述就是小编为大家分享的SEureka服务实例启动时是否会立刻向EurekaServer注册了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

实例 同步 服务 集群 信息 状态 缓存 配置 就是 事件 任务 内容 网络 问题 分析 变化 检查 设计 不同 下线 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库订单表包含收货地址么 反恐安全网络安全活动总结 网络安全群众工作调研文章 博科交换机 服务器黄灯 马云背后的男人网络安全 广州销售系统软件开发公司 网络安全需要学习什么技能 华为网络安全应急响应试题 网络安全于暴力感受 软件开发就业及前景 校园网络安全建设的必要性 深信服软件开发面试会编程吗 龙源数据库和维普数据库 上海武夷山软件开发 监控管理服务器为啥要收费 健身房数据库系统er图 通过外网ip管理服务器 防止数据库出现意外的方法 网络技术基础计算机网络的目标 饥荒联机版进别人服务器模组 怎么看分布式数据库事务 局开展自查保障网络安全 广州中智软件开发公司 单位网络安全应急值班表 翰林黄金软件开发 银行软件开发电话面试经验 北京企业管理系统软件开发 软件开发的瀑布过程模型 南京电大考试数据库 上市公司的数据库通常是什么样的
0