Nacos — Eureka+config的替代品

Posted 中年程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos — Eureka+config的替代品相关的知识,希望对你有一定的参考价值。

Netflix的Eureka不再维护了,Nacos就成为了很好的替代品。他是Spring Cloud Alibaba的一部分。优点是:功能全面,配置简单,而且还全面兼容Spring Cloud各通用组件。


Nacos作为微服务架构中的注册中心(替代:eureka、consul等传统方案)以及配置中心(spring cloud config)来使用。

说明:仍然以https://github.com/wangjuns8/spring-cloud-study.git项目为例。


第一部分:服务注册和发现


Nacos下载、安装、运行:

本文版本:1.4.0

Linux版本:

wget https://github.com/alibaba/nacos/releases/download/1.4.0/nacos-server-1.4.0.tar.gz

Windows版本:

https://github.com/alibaba/nacos/releases/download/1.4.0/nacos-server-1.4.0.zip


下载完成之后,解压。根据不同平台,执行不同命令,启动单机版Nacos服务:

Linux/Unix/Mac:

    sh startup.sh -m standalone

Windows:

    cmd进到nacos/bin目录下,执行 startup.cmd -m standalone

Nacos — Eureka+config的替代品


端口、path可以在conf/application.properties里修改。

退出cmd即关闭nacos。


启动完成之后,访问:http://localhost:8848/nacos/,可以进入Nacos的服务管理页面:

(默认登录用户名密码都是nacos)

Nacos — Eureka+config的替代品



父工程添加对spring-cloud-alibaba的依赖:

在pom.xml的dependencyManagement里添加:

       <dependency>

           <groupId>com.alibaba.cloud</groupId>

           <artifactId>spring-cloud-alibaba-dependencies</artifactId>

           <version>2.2.3.RELEASE</version>

           <type>pom</type>

           <scope>import</scope>

       </dependency>


Spring Cloud Alibaba的版本与Spring Boot、Spring Cloud版本一定要兼容,否则会出现莫名其妙的问题。参见:

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E


修改provider-user:

1. pom.xml添加依赖:

<dependency>

   <groupId>com.alibaba.cloud</groupId>

   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

(eureka的依赖可以注释掉了)


2. application.java

这个注释没有变化:

@EnableDiscoveryClient


3. application.yml添加:

spring.cloud.nacos.discovery.server-addr=http://49.232.150.148:8848

(eureka的可以注释掉了)


4. 启动provider-user,改个port再启动一个

Nacos-服务列表,可以看见启动了两个服务:



点击列表右侧的“详情”,可以对集群做保护阈值、访问权重、或启停服务等操作。


修改microservice-consumer-movie-feign

pom.xml 和 application.yml修改跟上面一样。

feign的调用部分不需要修改,完全兼容,而且已经LoadBalance。

当然,也同样支持RestTemplate。


=============================

至此,服务注册和发现部分完成。

=============================


第二部分:配置中心


nacos添加配置:

左侧菜单栏 -> 配置管理 -> 配置列表 -> 点击右上角的“+”按钮,进入“新建配置”页面

填写内容:




新建一个测试model:

microservice-nacos-config-client

在pom.xml里添加依赖:

<dependency>

   <groupId>com.alibaba.cloud</groupId>

   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

<dependency>

   <groupId>com.alibaba.cloud</groupId>

   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>


创建一个测试类:

标签@RefreshScope,用来让这个类下的配置内容支持动态刷新。

@RestController

@RefreshScope

public class TestController {

   @Value("${config.title}")

   String title;

   @GetMapping("/hi")

   public String hi() {

       return String.format("[nacos config client] hi : config.title= %s", title);

   }

}


创建配置文件application.yml

server:

   port: 8023

spring:

   application:

       name: microservice-nacos-config-client

   cloud:

       nacos:

           discovery:

               server-addr: http://localhost:8848

           config:

               server-addr: http://localhost:8848

可以看出来,nacos config和discovery是独立的。

注意:spring.application.name要与nacos的DataID一致。


启动应用:

访问http://localhost:8023/hi,可以看到配置信息。

在nacos上修改配置信息,再次访问,可以看到更新后的信息。


扩展:

1. 如果不想通过服务名来加载,那么可以自定义:

Nacos:

Data ID=example.properties

application.yml:

spring.cloud.nacos.config.prefix=example


2. 对于多环境,可以通过多种方式实现:

1)通过Data ID

${spring.cloud.nacos.config.prefix}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

2)通过Group

对应application.yml:

spring.cloud.nacos.config.group=DEV_GROUP

3) 通过Namespace

左侧菜单栏 -> 命名空间

现有的是public,可以自定义添加。


3. 加载多个配置

比如:

Nacos有两个配置文件:actuator.properties 和 log.properties

则在application.yml里配置:

spring.cloud.nacos.config.ext-config[0].data-id=actuator.propertiesspring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUPspring.cloud.nacos.config.ext-config[0].refresh=truespring.cloud.nacos.config.ext-config[1].data-id=log.propertiesspring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUPspring.cloud.nacos.config.ext-config[1].refresh=true


4. 关于集群

nacos支持高可用,只是需要用到mysql作为数据一致性的中间件。如果需要,MySQL也做高可用、读写分离等部署。这在性能要求和系统复杂度上会被迫增高。

在启动命令上,去掉“ -m standalone”。


总结:

不论是用来服务发现,还是配置中心都很方便(不像spring-cloud-config,为了实现实时更新,还需要安装RabbitMQ和其他配置啥的)。


One more thing:

Nacos还提供了其他服务管理方面的功能,如:命名空间、集群管理等。


更多详情,请参考:

Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

https://www.cnblogs.com/didispace/p/10285912.html

Spring Cloud Alibaba基础教程:使用Nacos作为配置中心

https://www.cnblogs.com/didispace/p/10332110.html

Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

https://www.cnblogs.com/didispace/p/10336688.html

Spring Cloud Alibaba基础教程:Nacos配置的多环境管理

https://www.cnblogs.com/didispace/p/10340685.html

Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置

https://www.cnblogs.com/didispace/p/10358157.html

Spring Cloud Alibaba基础教程:Nacos的数据持久化

https://www.cnblogs.com/didispace/p/10390186.html

Spring Cloud Alibaba基础教程:Nacos的集群部署

https://www.cnblogs.com/didispace/p/10412352.html


以上是关于Nacos — Eureka+config的替代品的主要内容,如果未能解决你的问题,请参考以下文章

Eureka停更了?试试Zookpper和Consul

Springboot整合eureka

zk与eureka比较

Nacos 快速上手

Spring Cloud Config(统一配置中心)

Spring Cloud 之配置中心