您好,登录后才能下订单哦!
这期内容当中小编将会给大家带来有关SEureka服务实例启动时是否会立刻向EurekaServer注册,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
基于SpringCloud-Dalston.SR5
是的,立刻会。
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 ):
@Override public 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执行一次这个任务
首先,EurekaClient会选择eureka.client.service-url.defaultZone配置的第一个EurekaServer,之后如果和这个EurekaServer没有网络问题,就会一直用这个。 在EurekaClient向EurekaServer发送注册,下线,心跳,状态改变等一切事件时,这些会在EurekaServer上面同步到集群(EurekaServer集群配置就是eureka.client.service-url.defaultZone,集群内每个EurekaServer)的所有Server上
这样的机制有没有问题?
这个同步到其他EurekaServer与本次EurekaClient请求是否是同步的? 不是同步的,例如注册到EurekaServerA,EurekaServerA将注册请求同步到EurekaServerB与当前注册请求是异步的
某次异步同步请求失败如何补偿? 例如服务实例A注册到EurekaServerA,但是同步到EurekaServerB失败。这时EurekaServerB就没有这个实例,在下次A心跳时,EurekaServerA同步心跳请求到EurekaServerB时,会返回404,触发重新注册 推论: 为了减少和均匀EurekaServer压力和访问便利,我们对于每个微服务的不同实例,配置Eureka集群都要写的顺序不一样,和自己网段一样的写的靠前
网络抖动时,导致访问到另一个Eureka,重启才能恢复。。。
通过EurekaServer内部定时检查过期实例任务,扫描Registry里面过期的实例并删除,并且使对应的ReadWriteMap缓存失效 注意,ReadOnlyMap里面的并不会立刻失效,而是通过下一个只读缓存刷新从ReadWriteMap刷到ReadOnlyMap感知变化。因为EurekaClient获取实例信息只从ReadOnlyMap读取,所以EurekaClient感知变化也会有这个延迟
SpringCloud环境下,EurekaClient有缓存,Ribbon对于调用的服务列表也有缓存,所以可以继续调用,但不会更新服务与实例列表了。 根据Eureka的self-preservation的设计思路,可以理解这种设计也是符合Eureka初衷的(CAP中的A)
上述就是小编为大家分享的SEureka服务实例启动时是否会立刻向EurekaServer注册了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。