背景
由于eureka注册中心是springBoot Cloud第一代原生的注册中心,因此早期的微服务项目都会使用eureka作为注册中心,但是eureka由于定时刷新与多个cache的设计,在服务上下线时存在较高的延迟,从而降低服务可用性!
方案
切换注册中心,由于微服务相对依赖,因此无法直接舍弃旧的注册中心,所以只能是多个注册中心同时存在
实际选型
国内只有阿里的nacos在性能与文档都是很成熟的,因此选择nacos
核心功能
- 服务注册方: 可以同时对多个注册中心进行注册本机
- 服务发现方: 可以使用多个注册中心进行实例获取且可以在运行时自由切换
- 兼容ribbon,从而对于feign服务调用无业务改动
亮大招
- 核心思路
通过二次封装eureka 与 nacos 各自client,利用各自client注册与发现的功能,并且绕开ribbon cache,只使用client这一层cache,进一步降低上下线变更延迟! - github仓库
https://github.com/saydad/MutilDiscovryRibbon - 服务调用方接入方式
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.boom</groupId>
<artifactId>mutil-discovry-ribbon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
server:
port: 8899
spring:
application:
name: metirc-parser
discovery:
multi:
#开启功能
enabled: true
eureka:
#开启eureka
enabled: true
address: http://127.0.0.1:8700/eureka
#拉取实例列表的优先级,值越大优先级越高
priority: 1
#是否注册自身
register: false
#eureka刷新cache的延迟(秒)
refresh-interval: 2
nacos:
enabled: true
address: 127.0.0.1:8848
priority: 2
register: false
- 服务注册方接入方式
<dependency>
<groupId>com.boom</groupId>
<artifactId>mutil-discovry-ribbon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
server:
port: 8899
spring:
application:
name: metirc-parser
discovery:
multi:
enabled: true
eureka:
enabled: true
address: http://127.0.0.1:8700/eureka
priority: 1
#注册自身
register: true
nacos:
enabled: true
address: 127.0.0.1:8848
priority: 2
register: true
- 使用说明
使用时jar包需要自行发布到私有仓库,README中对上线、下线操作时eureka、nacos注册变更的对比与测试代码,同时有代码详细简绍!
最后
希望实现思路对各位有所帮助!! 如果有帮助,给楼主点个star呀!
网友评论