前面对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
上图中几个点需要注意:
1)事件发布,从命令模式的维度理解Spring 之Application Event - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详细阐述了Spring关于事件处理的应用和机制。通过图中事件UML图
那么这俩事件的监听者是谁呢?即具体执行他们的是哪个Listener呢?找到泛型为这俩事件类型或父类型的Listener即可,跟踪可发现是通用事件RestartXXXXListener,只要实现了ApplicationEvent的类均会执行。
2)事件发布前,eureka各种环境准备关注int registryCount = this.registry.syncUp();