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
端口、path可以在conf/application.properties里修改。
退出cmd即关闭nacos。
启动完成之后,访问:http://localhost:8848/nacos/,可以进入Nacos的服务管理页面:
(默认登录用户名密码都是nacos)
父工程添加对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的替代品的主要内容,如果未能解决你的问题,请参考以下文章