服务注册发现:Eureka源码剖析(13)Spring Cloud Eureka源码剖析
Spring Cloud Netflix Eureka对eureka原生项目做了一点儿轻量级的封装。
下面通过几个Spring Cloud Netflix Eureka的核心注解来分析
@EnableEurekaClient
在Spring cloud Netflix eureka-client工程里
这个注解会将当前spring boot应用作为eureka client进行启动。他的处理类是EurekaClientAutoConfiguration
- EurekaClientConfigBean 这个是Spring自己实现EurekaClient接口搞的一个配置类,主要内容和原版Eureka的DefaultEurekaClientConfig作用是一样的,只不过提供了Spring方式的外部配置方式。
- EurekaInstanceConfigBean 这个是Spring自己实现EurekaInstanceConfig接口搞的一个配置类,作用和原版差不多
- EurekaServiceRegistry 是Spring自定义的服务注册中心,主要有注册、下线方法,这个类其实主要做心跳
- EurekaAutoServiceRegistration 这个是Spring对原生Eureka 的一个优化,会在服务启动时马上执行服务注册(原版需要等待40秒)
- CloudEurekaClient 继承了DiscoveryClient,主要是提供了一个onCacheRefreshed方法,这个拓展就是为了在EurekaClient拉取服务注册表时,更新一下Ribbon的ServerList。还有通过@Bean(destroyMethod = “shutdown”) 指定了Spring容器销毁时调用eureka client的服务下线方法进行下线
- ApplicationInfoManager 服务信息管理器,原版组件,没啥好说的
- EurekaRegistration 是ServiceInstance的子类,没啥特别的
- EurekaHealthIndicator Spring自定义了Eureka的HealthIndicator,边缘代码,不用看了
@EnableEurekaServer
在Spring cloud Netflix eureka-server工程里- EurekaController 这是Spring根据原生eureka控制台的Controller写的控制器,因为Spring重写了控制台,所以也配套搞了个Controller,没啥可说的
- InstanceRegistry我们的老朋友,原生的PeerAwareInstanceRegistryImpl的子类,主要是扩展了当发生注册、下线等等这些东西时,发布对应的Spring事件,算是Spring老生常谈的扩展方式了
- RefreshablePeerEurekaNodes 继承了原生的PeerEurekaNodes,主要是对接了Spring的配置体系,当涉及到eureka server地址列表的配置变更时,就可以联动PeerEurekaNodes,搞在线扩容缩容了。
- DefaultEurekaServerContext 老朋友,原生的,代表一个eureka服务器的上下文,里面包含了所有的组件资源
- EurekaServerBootstrap 这个是Spring把原生的同名类代码拷贝了过来,由于使用了Spring的@Bean装配,这个类的代码享受到了依赖注入的好处,清爽了不少,但功能没变。还是启动eureka server
可以看到,Spring对eureka的扩展主要是对接Spring,都是一些胶水代码,没啥可说的。