Eureka 平滑迁移Nacos 方案
本方案特点
1. 迁移的过程中,业务不受任何影响。
2. 迁移的过程中,不增加机器成本。
多注册和聚合订阅平滑迁移架构
通过多注册和聚合订阅平滑迁移到Nacos 的架构图如下:
通过引入edas-sc-migration-starter 使得Spring Cloud 应用支持多注册,这样确保原有系统的应用可以调用注册到Nacos 中的服务。
通过引入edas-sc-migration-starter 并配置RibbonClients Configuration 支持聚合订阅,使得迁移到Nacos 中的应用可以调用原有系统的服务。
迁移过程中,支持通过配置中心动态地修改订阅策略,支持通过Endpoint 监控聚合订阅的详,
做到可配置可监控。
迁移步骤
第⼀步,支持多注册和多订阅
1、修改pom.xml,添加spring-cloud-starter-alibaba-nacos-discovery 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>{相应的版本}</version>
</dependency>
并在application.properties 中添加nacos-server 的地址:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
2、支持多注册
默认情况下Spring Cloud 只支持在依赖中引入⼀个注册中心,当存在多个注册中心时,启动会报
错。所以这里需要添加⼀个依赖edas-sc-migration-starter ,使得Spring Cloud 应用支持多注册。
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sc-migration-starter</artifactId>
<version>1.0.1</version>
</dependency>
3、修改Ribbon 配置,支持同时从多个注册中心订阅
在应用启动的主类中,显示地指定RibbonClients 的配置为MigrationRibbonConfiguration。假设原有的应用主类启动代码如下:
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
那么修改后的应用主类启动代码如下:
@SpringBootApplication
@RibbonClients(defaultConfiguration = MigrationRibbonConfiguration.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
注意:默认的订阅策略是从所有注册中心订阅,并对数据做⼀些简单的聚合。您可以通过spring.cloud.edas.migration.subscribes 属性来选择从哪几个注册中心订阅数据。spring.cloud.edas.migration.subscribes=nacos,eureka # 同时从Eureka 和Nacos 订阅服务
spring.cloud.edas.migration.subscribes=nacos # 只从Nacos 订阅服务
如果您想在应用运行时动态修改从哪些注册中心订阅数据,直接使用Spring Cloud 配置管理功能
在运行时修改此属性即可。
4、将修改后的应⽤打包,并部署
5、验证迁移是否成功
最重要的⼀点,观察业务本身是否正常。
如果您的应用开启了Actuator 监控,那么可以通过Actuator 来查看此应用订阅的各服务的RibbonServerList 的信息。metaInfo 中的serverGroup 字段代表了此节点来源于哪个服务注册
中心。