文章目录
前言
android系统定制开发大概在去年的时候发现android系统定制开发生产环境使用经常会发android系统定制开发现服务假死eurekaandroid系统定制开发没有给踢掉的情况,android系统定制开发然后就衍生了要不就换个注册中心试试,然后就了解到了nacos,正好他还融合了配置中心,但是后来碍于切换时怕生产环境不稳定,丢数据等问题就一直没有换,但后续的项目的注册中心都换成了nacos,这篇文章我就来模拟一下如何将eureka平滑切换成nacos
父工程构建
这里我在父工程里边又单独创建了一层父工程,我分别在alibaba-cloud 、netflix-cloud 中模拟新旧微服务
父工程pom
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>top.fate</groupId> <artifactId>nacoAndEureka</artifactId> <packaging>pom</packaging> <version>1.0.0</version> <modules> <module>netflix-cloud</module> <module>alibaba-cloud</module> </modules></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
模拟旧版微服务
netflix-cloud pom如下 ,因为这里是模拟旧服务,所以都采用旧版本
- 1
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>nacoAndEureka</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>netflix-cloud</artifactId> <packaging>pom</packaging> <modules> <module>eureka</module> <module>eureka-provider</module> <module>eureka-consumer</module> </modules> <properties> <spring.boot.version>2.1.2.RELEASE</spring.boot.version> <spring.cloud.version>Greenwich.SR5</spring.cloud.version> </properties> <dependencyManagement> <dependencies> <!-- springBoot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springCloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
搭建eureka
- pom依赖如下
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>netflix-cloud</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- EurekaApplication 启动类
package top.fate.eureka;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- application.yml
server: port: 8761spring: application: name: eureka-serviceeureka: instance: # 设置该服务注册中心的hostname hostname: 127.0.0.1 client: # 我们创建的是服务注册中心,而不是普通的应用,这个应用会向注册中心注册它自己 #,设置为false就是禁止自己向自己注册的这个种行为 register-with-eureka: false # 不去检索其他的服务,因为注册中心本身的职责就是维护服务实例 fetch-registry: false # 制定服务注册中心的位置 service-url.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
eureka-provider
- pom依赖如下
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>netflix-cloud</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka-provider</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <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></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- EurekaProviderApplication 启动类
package top.fate.eurekaprovider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 14:23 */@SpringBootApplication@EnableEurekaClient@RestControllerpublic class EurekaProviderApplication { public static void main(String[] args) { SpringApplication.run(EurekaProviderApplication.class, args); } @GetMapping("/info") public String info(){ return "this is eureka-service"; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- application.yml
server: port: 8081spring: application: name: providereureka: client: service-url: defaultZone: "http://localhost:8761/eureka"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
eureka-consumer
- pom依赖如下
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>netflix-cloud</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka-consumer</artifactId> <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> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- EurekaConsumerApplication 启动类
package top.fate.eurekaconsumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.openfeign.EnableFeignClients;import top.fate.eurekaconsumer.client.EurekaProviderClient;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 14:43 */@SpringBootApplication@EnableEurekaClient@EnableFeignClients(clients = EurekaProviderClient.class)public class EurekaConsumerApplication { public static void main(String[] args) { SpringApplication.run(EurekaConsumerApplication.class, args); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- EurekaProviderClient
package top.fate.eurekaconsumer.client;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 14:48 */@FeignClient(value = "provider")public interface EurekaProviderClient { @GetMapping("info") String info();}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- ConsumerController
package top.fate.eurekaconsumer.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import top.fate.eurekaconsumer.client.EurekaProviderClient;import javax.annotation.Resource;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 14:48 */@RestControllerpublic class ConsumerController { @Resource private EurekaProviderClient eurekaProviderClient; @GetMapping("getProvider") public String getProvider(){ return eurekaProviderClient.info(); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
测试服务是否可以调通
这里我三个服务都启动正常,直接访问8091consumer测试 ,如下图所示consumer 可以访问provider
第一阶段流程图
模拟新版微服务
alibaba-cloud pom如下,采用最新版技术栈
- 1
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>nacoAndEureka</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>alibaba-cloud</artifactId> <packaging>pom</packaging> <modules> <module>nacos-consumer</module> <module>nacos-provider</module> </modules> <properties> <spring.boot.version>2.6.3</spring.boot.version> <spring.cloud.version>2021.0.1</spring.cloud.version> <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version> </properties> <dependencyManagement> <dependencies> <!-- springBoot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- springCloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring-cloud-alibaba --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> </dependency> </dependencies> </dependencyManagement></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
启动安装
可以参考 这篇文章我就不重复操作了
nacos-provider
- pom 依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>alibaba-cloud</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>nacos-provider</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.0.1.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- NacosProviderApplication 启动类
package top.fate.nacosprovider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 16:55 */@SpringBootApplication@RestController@EnableConfigurationProperties(AutoServiceRegistrationProperties.class)public class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); } @GetMapping("/info") public String info() { return "this is nacos-service"; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- application.properties
spring.autoconfigure.exclude=org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration
- 1
- application.yml
url: nacos: localhost:8848server: port: 8082spring: application: name: provider profiles: active: dev cloud: nacos: discovery: #集群环境隔离 cluster-name: shanghai #命名空间 namespace: ${spring.profiles.active} #持久化实例 ture为临时实例 false为持久化实例 临时实例发生异常直接剔除, 而持久化实例等待恢复 ephemeral: true #注册中心地址 server-addr: ${url.nacos}eureka: client: service-url: defaultZone: "http://localhost:8761/eureka"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
nacos-consumer
- pom依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>alibaba-cloud</artifactId> <groupId>top.fate</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>nacos-consumer</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.0.1.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies></project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- NacosConsumerApplication 启动类
package top.fate.nacosconsumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties;import org.springframework.cloud.openfeign.EnableFeignClients;import top.fate.nacosconsumer.client.EurekaProviderClient;import top.fate.nacosconsumer.client.NacosProviderClient;import top.fate.nacosconsumer.client.ProviderClient;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 16:39 */@SpringBootApplication@EnableFeignClients(clients = {EurekaProviderClient.class, NacosProviderClient.class, ProviderClient.class})@EnableConfigurationProperties(AutoServiceRegistrationProperties.class)public class NacosConsumerApplication { public static void main(String[] args) { SpringApplication.run(NacosConsumerApplication.class, args); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- ProviderClient
package top.fate.nacosconsumer.client;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 18:24 */@FeignClient(value = "provider")public interface ProviderClient { @GetMapping("info") String info();}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- ConsumerController
package top.fate.nacosconsumer.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import top.fate.nacosconsumer.client.ProviderClient;import javax.annotation.Resource;/** * @auther:Wangxl * @Emile:18335844494@163.com * @Time:2022/6/16 14:48 */@RestControllerpublic class ConsumerController { @Resource private ProviderClient providerClient; @GetMapping("getProvider") public String getProvider(){ return providerClient.info(); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- application.properties
spring.autoconfigure.exclude=org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration
- 1
- application.yml
url: nacos: localhost:8848server: port: 8092spring: application: name: nacos-consumer profiles: active: dev cloud: nacos: discovery: #集群环境隔离 cluster-name: shanghai #命名空间 namespace: ${spring.profiles.active} #持久化实例 ture为临时实例 false为持久化实例 临时实例发生异常直接剔除, 而持久化实例等待恢复 ephemeral: true #注册中心地址 server-addr: ${url.nacos}eureka: client: service-url: defaultZone: "http://localhost:8761/eureka"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
上线双注册双订阅新provider服务
先启动nacosProviderApplication
如下图所示,我们已经实现了双注册,nacos和eureka中都注册了服务
nacos
eureka
平滑切换注册中心
验证旧consumer
这里我访问8091的旧版Netflix客户端也就是
eureka-consumer
,看一下调用的是8081 eureka 还是8082 nacos , 这里我反复调用了十几次,返回结果为
- this is nacos-service
- this is eureka-service
因为此时我们的8091
客户端只有eurekaClient
,然后我们的provider在eureka注册中心有两个实例
,所以就触发了负载均衡
,这里我们用的默认轮询模式
,当前流程如下图
下线旧provider
现在我们就可以陆续开始平滑
切换注册中心
了,旧provider可以关掉了,关掉旧provider之后此时的流程就如下图所示了
此时我们再访问
旧consumer
只会返回 this is nacos-service,因为旧的provider已经下线了 ,新provider当前已经切换完成!
上线双注册双订阅新consumer服务,下线旧consumer
启动nacoConsumerApplication
访问8092验证是否能正常访问,继续访问getProvider接口,如下图所示访问正常,然后我们就可以下线旧consumer服务了
疑惑 (该步骤可以直接略过)
现在我们有个疑惑,现在有两个注册中心,服务发现是走的eureka还是nacos呢
为此,我做了个实验,我分别启动了旧provider
、新provider
、新consumer
此时双注册中心的服务
- eureka
- provider8081、provider8082
- consumer8092
- nacos
- provider8082
- consumer8092
现在我通过
consumer8092
客户端去请求,得到的结果只有 this is nacos-service ,因此判断注册中心默认走的是nacos.
因为走nacos
只会返回this is nacos-service
, nacos只有一个实例。
如果走eureka的话会轮询返回this is nacos-service、this is eureka-service
,eureka有两个实例。
此时的流程图
虚线代表该线路空闲
这里我找了下源码CompositeDiscoveryClient,调用的时候打了断点,发现系统创建了
三个discoveryClient
,nacos
排在第一个,如果可用的话直接就返回了 ,所以可以理解为默认走的是nacos
这里我想到了nacos有个服务下线功能,如果我将nacos中的服务下线之后应该就会去走eureka了吧
等待几秒过后,通过consumer8092
客户端去请求,得到了我想要的结果
分别轮询返回了this is nacos-service
、this is eureka-service
,证明已经走eureka了
此时流程图
虚线代表该线路空闲
最后
此时我们生产上边是 新consumer、新provider、eureka、nacos,既然我们要切换到nacos,那eureka就也要停掉了,我们可以在
下一版的服务中去掉 eureka的依赖和配置
,只留下nacos,将这一个新版本部署上去之后就可以停掉eureka了
如下图所示
注意
如果直接引入eureka-client和nacos-client 会报错,如下
Field autoServiceRegistration in org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration required a single bean, but 2 were found: - nacosAutoServiceRegistration: defined by method 'nacosAutoServiceRegistration' in class path resource [com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.class] - eurekaAutoServiceRegistration: defined by method 'eurekaAutoServiceRegistration' in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.class]
- 1
- 2
- 3
- 需要在配置文件添加如下内容
spring.autoconfigure.exclude=org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration
- 1
- 启动类添加注解
@EnableConfigurationProperties(AutoServiceRegistrationProperties.class)
- 1
原创不易,请点个赞再走吧!感谢