nacos简介
服务发现
配置管理
一、nacos服务搭建
- nacos服务端 https://github.com/alibaba/nacos/releases
- bin目录下有启动、停止脚本:
windows环境:standalone表示单机启动(或者直接双击bin/startup.cmd也可以,但是双击启动前需要改startup.cmd文件,将mode模式从默认cluster集群模式启动调整为standalone单机模式启动,不推荐使用该粗暴方式):
startup.cmd -m standalone
Linux环境:
sh startup.sh -m standalone
- 我们在windows环境下演示,启动成功之后能够看到以下界面:
- 默认启动端口为8848,我们访问http://localhost:8848/nacos/index.html#/login
- 使用默认账号:nacos、密码:nacos,登录成功之后即进入到以下界面:
二、配置管理
首先,我们介绍配置管理。
我们需要将配置文件通过nacos进行管理,那么最主要的两个功能就是发布配置和获取配置,有两种方式来进行管理。
-
通过接口进行管理
-
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
或者直接通过postman发送post请求:
-
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
或者直接通过postman发送get请求:
-
-
通过GUI页面端管理
在网页上查询一下配置管理的列表,我们就发现多了一条上面通过接口新增的配置:
同样,我们也能在可视化网页中增加配置,点击右侧的+号就能进入到新增界面,并填写相关信息提交即可:
同时支持修改、删除、导入等操作。
三、结合springboot
-
首先需要引入相关pom依赖:
需注意SpringBoot与nacos的版本号也许有冲突,这里使用2.7.2版本的SpringBoot与2021.0.1.0的spring-cloud-alibaba-dependencies,备注:spring-cloud-dependencies 2020.0.0 版本不在默认加载bootstrap 文件,如果需要加载bootstrap 文件需要手动添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.3</version>
</dependency>
-
准备两份配置文件
-
application.yml
spring: profiles: active: dev
-
bootstrap.yml
server: port: 8080 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos地址 config: server-addr: localhost:8848 #Nacos地址 file-extension: yaml #这里我们获取的yaml格式的配置
-
-
nacos中dataid的命名规则为 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name−{spring.prifiles.active}.${spring.cloud.nacos.config.file-extension},即此处我们的dataid=nacos-config-client-dev.yaml,在nacos的配置管理上新建对应配置,并新建一个配置项:useLocalCache: false
-
暴露一个出口/config/get,获取useLocalCache变量:
@RestController @RefreshScope @RequestMapping("/config") public class ConfigController { @Value("${useLocalCache}") private boolean useLocalCache; @GetMapping("/get") public boolean get() { return useLocalCache; } }
-
访问http://localhost:8080/config/get,返回useLocalCache的值为false
-
在nacos上修改useLocalCache的值为true,这个时候我们观察到日志打印以下内容表示配置已刷新
Refresh keys changed: [useLocalCache]
-
再次访问http://localhost:8080/config/get,返回useLocalCache的值为true,动态更改配置文件的功能即已生效
番外:集群部署
-
运行conf目录下的sql文件
nacos\conf\nacos-mysql.sql
-
调整conf目录下的application.properties文件,指向运行了上面sql脚本文件的数据库连接信息
#*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: spring.datasource.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=root
-
启动
windows:双击startup.cmd
linux:sh startup.sh
-
上述是启动单机的步骤,后面部署集群还需要调整conf目录下的cluster.conf,我们暂定另一台集群ip还是本机,但是端口为8858,即加上下面的内容
127.0.0.1:8848 127.0.0.1:8858
-
将上面配置好的nacos复制一份出来唯一要调整的就是conf目录下的application.properties文件中的server.port=8858
-
同样启动
-
访问http://localhost:8848/nacos/#/login或者访问http://localhost:8858/nacos/#/login就能看到nacos的界面,默认账号密码依旧都是nacos
-
验证测试一下,我们在8848端口的nacos加上一个配置,在8858上也能看到了
Tips:这里之前笔者用8848和8849做实验,发现总是有一个服务会报端口占用。查了资料发现,新版本的nacos增加了gRPC的通信方式。即在启动对应端口的服务同时,会占用顺延1000的端口,比如我们启动了8848端口的服务,gRPC已经使用了9848和9849,这个时候我们再启动一个8849的服务,gRPC会去使用9849和9850,这个时候9849端口被两个服务都使用了,就报端口占用无法启动了。所以尽量多个nacos服务之间的端口号间隔稍大一些。
参考资料: