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,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...
随机推荐
- vue3.0+vite+ts项目搭建-postcss-pxtorem 实现移动自适应(五)
这里不考虑大屏,所以不做amfe-flexible的配置 首先是安装依赖 yarn add postcss-loader postcss-pxtorem -D yarn add autoprefixe ...
- 07.python函数作用域global、nonlocal、LEGB
函数作用域 作用域 一个标识符的课件范围,这就是标识符的作用域,一般常说的是变量的作用域 def foo(): x = 100 print(x) # 可以访问到吗 上例中x不可以访问到,会抛出异 ...
- 安装hadoop2.9.2单机版本 jdk1.8 centos7
安装JDK1.8 查看JDK1.8的安装 https://www.cnblogs.com/TJ21/p/13715749.html 安装hadoop 上传hadoop 下载hadoop 地址h ...
- redis的使用场景和优缺点
使用场景和优缺点: 2 Redis用来做什么? 通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求.而通常在一个电商类型的数据处理过程之中,有关商品,热销, ...
- Pod:Kubernetes最小执行单元
Pod基本概念理解 Pod是什么 Pod 是 Kubernetes 应用程序的基本执行单元,它是 Kubernetes 对象模型中创建或部署的最小和最简单的单元. 一个Pod可以包括一个或者多个容器. ...
- 论文翻译:2019_TCNN: Temporal convolutional neural network for real-time speech enhancement in the time domain
论文地址:TCNN:时域卷积神经网络用于实时语音增强 论文代码:https://github.com/LXP-Never/TCNN(非官方复现) 引用格式:Pandey A, Wang D L. TC ...
- BAT经典面试题之redis的热KEY问题怎么解决
引言 讲了几天的数据库系列的文章,大家一定看烦了,其实还没讲完...(以下省略一万字).今天我们换换口味,来写redis方面的内容,谈谈热key问题如何解决.其实热key问题说来也很简单,就是瞬间有几 ...
- golang中为何在同一个goroutine中使用无缓冲通道会导致死锁
package main import "fmt" func main() { /* 以下程序会导致死锁 c := make(chan int) c <- 10 n1 := ...
- gin中的路由参数
package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { router := ...
- Druid未授权访问实战利用
Druid未授权访问实战利用 最近身边的同学都开始挖src了,而且身边接触到的挖src的网友也是越来越多.作者也是在前几天开始了挖src之路.惊喜又遗憾的是第一次挖src就挖到了一家互联网公司的R ...