双注册双订阅中心
注册中心迁移
Eureka到Nacos
-
场景:业务升级,需要将注册中心从eureka转到Nacos。nacos功能更强大,响应更快!
-
要求:需要在不影响业务的情况下完成注册中心的转换。即不影响代码调用的情况下完成注册中心的替换!!!!
是不是听着都很高大上!!!
先用文字描述一下整个过程然后开始实操!!
- 初始阶段。eureka作为注册中心,provider完成服务注册并对外提供访问。consumer完成调用provider的相关服务。(consumer可注册可不注册,但是需要连接注册中心)
- 双注册中心阶段。用来做过渡
- 为服务provider上线一个新的实例,该实例即注册到eureka又注册到nacos。provider在eureka有两个实例。
- 下线旧的provider实例,即之注册到eureka的那个实例。这是consumer依旧可以访问到provider存活的另一个实例。
- 为服务consumer上线一个新的实例,该实例即注册到eureka又注册到nacos。consumer在eureka有两个实例。
- 下线旧的consumer。此时依旧可以使用存活的双注册实例访问provider服务。
- 完成转换:下线eureka服务中心。使用nacos完成替换。此时可以provider和consumer服务只和nacos进行交互
- 至此完成注册中心的替换!注意:关于服务之间的调用模式使用ribbon和openFeign都可以。本文以ribbon为例子。
注意:两个模块有一个父项目。下边模块的依赖省略了父模块的依赖。父项目pom依赖如下。注意版本间对应关系。如果需要更换版本可以去SpringCloudAlibaba的GitHub上查看对应关系。地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1. 初始阶段:Eureka单注册中心环境
provider服务: 9007端口
- pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
- 配置文件
server:
port: 9007
spring:
application:
name: aaa
main:
allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:6868/eureka
instance:
prefer-ip-address: true
- 启动类
@SpringBootApplication
public class AApp {
public static void main(String[] args) {