Eureka Server启动过程
前面对Eureka的服务端及客户端的使用均已成功实践,对比Zookeeper注册中心的使用区别还是蛮大的:
P:分区容错性(⼀定的要满⾜的)C:数据⼀致性 A:⾼可⽤;CAP不可能同时满⾜三个,要么是AP,要么是CP。
就使用而言最明显就是Zookeeper需要安装3个或3个以上服务端安装启用才能构成集群而Eureka导入依赖处理配置文件同时开启Eureka Server自动装配即可。Zookeeper具体使用可参考Zookeeper应用之一:数据发布与订阅初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)。
Eureka Server如何启动的呢?回忆一下Spring Boot的热插拔技术Spring Boot 热插拔技术应用 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com),Eureka Server启动也是利用了该技术。
通过源码可知,需要有⼀个marker bean,才能装配Eureka Server,那么这个marker其实是由@EnableEurekaServer注解决定的。所以@EnableEurekaServer开启了Eureka Server的自启动。
下面重点分析自动配置及Server启动部分:
1、EurekaServerAutoConfiguration
2、EurekaServerInitializerConfiguration
对于实现了Lifecycle接口的EurekaServerInitializerConfiuration,start方法如何生效呢?实际上Spring提供了LifecycleProcessor接口,即生命周期处理器处理生命周期相关的内容(参考Spring容器变化之SmartLifecycle,LifecycleProcesso接口详述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)),具体如下:
3)EurekaServerInitializerConfiuration中start做了哪些工作:
上图中几个点需要注意:
1)事件发布,从命令模式的维度理解Spring 之Application Event - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详细阐述了Spring关于事件处理的应用和机制。通过图中事件UML图
那么这俩事件的监听者是谁呢?即具体执行他们的是哪个Listener呢?找到泛型为这俩事件类型或父类型的Listener即可,跟踪可发现是通用事件RestartXXXXListener,只要实现了ApplicationEvent的类均会执行。
2)事件发布前,eureka各种环境准备关注int registryCount = this.registry.syncUp();
对于注册到服务器端的服务组件, Eureka 服务器并没有提供后台的存储, 这些注册的服务实例被保存在内存的注册中心, 它们通过心跳来保持其最新状态, 这些操作都可以在内存中完成。 客户端存在着相同的机制, 同样在内存中保存了注册表信息, 这样的机制提升了Eureka 组件的性能, 每次服务的请求都不必经过服务器端的注册中心。
Eureka Server启动过程的更多相关文章
- Eureka Server启动过程分析
1.首先,SpringCloud充分利用了SpringBoot的自动装配特点 eureka-server的jar包,发现在META-INF下面的配置文件spring.factories,里面记录了Sp ...
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系 ...
- 曹工说Redis源码(3)-- redis server 启动过程完整解析(中)
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)
曹工说Redis源码(5)-- redis server 启动过程解析,eventLoop处理事件前的准备工作(下) 文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis ...
- Spring Cloud Eureka(五):Eureka Server 启动流程分析
启用EurekaServer @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public st ...
- 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...
- ES系列(一):编译准备与server启动过程解析
ES作为强大的和流行的搜索引擎服务组件,为我们提供了方便的和高性能的搜索服务.在实际应用中也是用得比较爽,但如果能够更深入一点.虽然网上有许多的文章已经完整说明,ES是如何如何做到高性能,如何做到高可 ...
- 【源码】Redis Server启动过程
本文基于社区版Redis 4.0.8 1. 初始化参数配置 由函数initServerConfig()实现,具体操作就是给配置参数赋初始化值: //设置时区 setlocale(LC_CO ...
- 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...
随机推荐
- vue注册全局组件
在项目开发中能不能自己写一个组件可以像iview或者element那样可以不必引用就可以直接用呢?答案是可以的. 首先,写一个组件mainHeader. 接着在vue中注册这个组件,代码如下: Vue ...
- 若依(ruoyi)代码生成树表结构的那些坑
若依(RuoYI)代码生成树表结构的那些坑 相信许多做后端开发的同学,一定用过若依这款框架,这款框架易上手,适合用来做后台管理系统,但是其中也存在一些坑,稍不注意就会中招(大佬可以忽略...) 今天, ...
- C# 给PDF文档设置过期时间
我们可以给一些重要文档或者临时文件设置过期时间和过期信息提示来提醒读者或管理者文档的时效性,并及时对文档进行调整.更新等.下面,分享通过C#程序代码来给PDF文档设置过期时间的方法. 引入dll程序集 ...
- [STM32F4xx 学习] SPI小结
一.STM32F4xx系列的SPI特点: 1. 支持全双工的3线SPI模式(即SCK, MISO, MOSI) 2. 支持单工2线传输,同时数据线可以设置成单向或者双向模式 3. 8-bit, 16- ...
- 【刷题-LeetCode】240. Search a 2D Matrix II
Search a 2D Matrix II Write an efficient algorithm that searches for a value in an m x n matrix. Thi ...
- Cesium和Kaarta用高分辨率激光雷达可视化室内和地下环境
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium使急救人员和军事操作人员更容易快速评估和了解密集和不 ...
- 关于new Date总结及注意事项
记录关于 new Date() 的一些常用方法及问题 new Date()基本方法: 创建一个日期对象的几种方法 注意: 由于浏览器差异和不一致性,强烈建议不要使用Date构造函数(和Date.par ...
- docker镜像中文件丢失
背景介绍 笔者创建了一个镜像,然后在不同的主机上启动,发现有的能启动,有的却不行,报错信息为找不到文件. 犹记得当初有人介绍,只要docker镜像做好了,拿到任何地方都可以用,此处好像不成呢,好诡异的 ...
- 题解 - 「MLOI」小兔叽
小兔叽 \(\texttt{Link}\) 简单题意 有 \(n\) 个小木桩排成一行,第 \(i\) 个小木桩的高度为 \(h_i\),分数为 \(c_i\). 如果一只小兔叽在第 \(i\) 个小 ...
- HTTP状态码1XX深入理解
前段时间看了<御赐小仵作>,里面有很多细节很有心.看了一些评论都是:终于在剧里能够看到真正在搞事业.发了工资第一时间还钱的正常人了.我印象比较深的是王府才能吃上的葡萄.觉得非常合理.剧里说 ...