不涉及业务代码,应该可公开吧,理解非常浅薄,仅仅作为个人笔记,只能内网,贴照片了
需求:gateway(其他应用也行)根据配置参数指定使用nacos或eureka
效果:
当改配置为nacos时,本地服务注册到nacos上去,eureka挂掉
使用nacos时注意把register-enabled注册改成true,否则直接读的是服务器上的nacos配置
当改配置为eureka时,本地服务注册到eureka上去, nacos挂掉
思路:
1、之前从未搭建过,快速在网上随便找了一个视频两倍速过了一遍gateway、nacos、eureka理论
2、百度gateway集成它俩配置,直到单独分别注册成功,这时还没做好指定哪个
3、考虑到具体使用哪个,想了做个实例加载时的过滤,百度先从gateway过滤器开始,但是大概只有全局过滤器,用来鉴权的。于是考虑到先看nacos自动装配的源代码。大概知道了他的流程
源码(不分析eureka了大概都差不多吧,仅仅大概能看懂个流程,不用细看怎么设计的,先读懂就好)
springboot加载时根据pom中依赖去找这个类(入口),里面
有三个bean。主要是第一个和第三个核心
第一个和第二个
第三个bean
先看第一个,其实就是从配置文件读了配置装到XXProperties里在赋给NacosServiceRegistry,可以点进去
进去这样,把配置文件的nacos配置信息加载进来,对应路径
这个类里有个init(),通过注解(注解具体实现先不用看了)加载,这方法就是把配置文件的信息封装了一下给了metadata
封装完就是给第二个bean初始化时调的,第二个bean点进去获取这个metadata
第二个bean这个方法里我猜就是映射好配置信息定制一个消费它的入口,但点不进去源码了看不了了。
这就是发现时注入的bean,可以理解为消费者,同理,不分析了
注册时的第三个bean
点进去,其实就是把第一个第二个bean都加载到这个方法里
点进去后有个注册的方法,这时候才开始注册了
这个注册的方法就是加载第三个bean时一路调的
看完后写了一个过滤器。Spring Boot在启动的时候,根据SPI机制会去加载/spring-cloud-starter-alibaba-nacos-discovery-2.2.1.RELEASE.jar/META-INF/spring.factories中的自动配置类,涉及到注册的是com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration
所以在过滤器里适配了com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration就好了。
具体实现代码:
过滤器里的注册项
在resources下建META-INF的文件夹,META-INF下建spring.factories的文件如图:作用是springboot启动后会根据这个地址去先加载自定义的过滤器
映射到这个过滤器里进行判断要装载nacos还是eureka
在bootstrap.yml配置registry和eureka是否根据ip注册,以及每个环境里配置eureka的注册地址
增加注解
eureka源码没看,springboot大概装载都差不多吧