文章目录
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.3.12.RELEASE版本的SpringBoot与0.2.10的nacos-starter
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- nacos-config -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.10</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.0</version>
</dependency>
-
将application.yml配置文件更名为bootstrap.yml,并加上以下配置:
nacos: config: type: yaml server-addr: localhost:8848 context-path: nacos data-ids: dml-webservice.application.yaml auto-refresh: true group: DEFAULT_GROUP bootstrap: enable: true log: enable: true
-
在启动类加上@NacosPropertySource注解,dataId与配置在nacos里的dataId保持一致:
@SpringBootApplication @NacosPropertySource(dataId = "example", autoRefreshed = true) public class MynacosApplication { public static void main(String[] args) { SpringApplication.run(MynacosApplication.class, args); } }
-
暴露一个出口/config/get,获取useLocalCache变量:
@RestController @RequestMapping("config") public class ConfigController { @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true) private boolean useLocalCache; @GetMapping("/get") public boolean get() { return useLocalCache; } }
-
访问http://localhost:8080/config/get
番外:集群部署
-
运行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服务之间的端口号间隔稍大一些。
参考资料:
-
Nacos
-
springboot2.2.6项目接入Nacos流程
-
Windows安装Nacos单机&集群
-
Nacos2.0.1数据持久化和伪集群学习–集群启动报错问题(Error creating bean with name ‘grpcSdkServer‘)
-
SpringBoot整合Nacos的一些方案