初步学习Nacos
# Nacos简介
在 Spring Cloud Netflix 阶段我们采用 Eureka 做作为我们的服务注册与发现服务器,现利用 Spring Cloud Alibaba 提供的 Nacos 组件替代该方案。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
nacos注册中心工作流程
# 3.2.2 Nacos安装
docker run --restart=always --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
查看nacos日志信息:docker logs nacos
访问地址
http://ip:8848/nacos
nacos的默认端口号是8848,珠穆朗玛峰的高度也是8848米呦!默认账号密码是nacos/nacos
# 3.2.3 Nacos注册中心使用
1)在资源中导入nacos演示工程
2)顶级父工程添加依赖包
<!-- nacos注册中心依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 监控检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2
3
4
5
6
7
8
9
10
2)nacos-web工程添加配置文件bootstrap.yml
spring:
application:
name: nacos-web
cloud:
nacos:
discovery:
server-addr: 192.168.200.128:8848
server:
port: 9100
#健康检查
management:
endpoints:
web:
exposure:
include: "*"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3)nacos-web工程添加启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosWebApplication {
public static void main(String[] args) {
SpringApplication.run(NacosWebApplication.class,args);
}
}
2
3
4
5
6
7
8
4)nacos-web工程新建InfoController
@RestController
public class InfoController {
@Value("${server.port}")
private String port;
@Value("${key:''}")
private String key;
@GetMapping(value = "/echo/{message}")
public String echo(@PathVariable(value = "message") String message) {
return "Hello Nacos Discovery " + message + ", i am from port " + port;
}
@GetMapping(value = "/config")
public String config() {
return "Hello Nacos Config get "+key ;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
5)启动服务并查看效果
6)修改端口,查看nacos集群支持
# 3.2.5 Nacos配置中心使用
# 3.2.5.1 基础使用
1)顶级父工程添加依赖
<!-- nacos配置中心依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>c
</dependency>
2
3
4
5
2)核心配置信息
注意:
配置文件必须是bootstrap.properties或者bootstrap.yml,如果配置application.properties或者application.yml会导致加载不到配置.
2
spring:
application:
name: nacos-web
cloud:
nacos:
discovery:
server-addr: 192.168.200.140:8848
config:
server-addr: 192.168.200.140:8848
file-extension: yml #指定文件扩展名,默认为properties
server:
port: 9100
#全局健康检查
management:
endpoints:
web:
exposure:
include: "*"
#日志
logging:
level:
org.springframework.web: debug
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
新建配置
配置文件名称 : 默认和 spring.application.name一致
文件后缀 :默认是 properties
nacos支持6种文件格式
测试config接口
http://127.0.0.1:9100/config
@GetMapping(value = "/config")
public String config() {
return "Hello Nacos Config get "+key ;
}
2
3
4
# 3.2.5.2 动态刷新
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。
如果需要对 Bean 进行动态刷新,参照 Spring 和 Spring Cloud 规范。推荐给类添加 @RefreshScope 进行自动刷新
# 3.2.5.4 多环境支持
我们在做项目开发的时候,可能会存在多种环境,并且每一种环境所设置的配置都是不同的,所以我们可能会在线上手工修改这些配置信息。同时 Spring 中为我们提供了 Profile 这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的 Profile 就可以了。
操作起来很简单,只需要为不同的环境编写专门的配置文件,如:application-dev.yml、application-prod.yml, 启动项目时只需要增加一个命令参数 --spring.profiles.active=环境名称 即可。
测试环境 test
开发环境 dev
生产环境 prod
支持不同环境配置
nacos可以同时支持多环境配置。只需要在nacos配置中心中根据dataId进行区分即可。dataId 完整的拼接格式如下
在 Nacos Config Starter 中,dataId 完整的拼接格式如下
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
- spring.profiles.active 即为当前环境对应的 profile
- file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。
1)修改bootstrap.yml
spring:
profiles:
active: dev #开发环境
application:
name: nacos-web
cloud:
nacos:
discovery:
server-addr: 192.168.200.140:8848
config:
server-addr: 192.168.200.140:8848
file-extension: yml #后缀
prefix: nacos-web #前缀
server:
port: 9100
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2)nacos中新增配置信息
# 3.2.5.5 配置共享
# 3.2.5.5.1 不同环境下配置信息共享
在开发中,虽然可以在不同环境下使用不同的配置文件,但是有一些配置是通用的,需要在不同的环境下,都进行生效。
- 当开发环境为:dev时。
- 当开发环境为:test时。
根据上述测试,可以发现,不同的开发环境下都会去加载nacos-web.yml,也就是没有指定特定环境的文件。那么对于通用配置就可以设置在这个文件中。
更新nacos配置中心的nacos-web.yml。
InfoController中获取该值
环境为test:访问并获取结果
环境为dev:访问并获取结果
# 3.2.5.5.2 不同应用间配置信息共享
在实际项目中,常常需要不同应用间配置共享。比如redis连接信息,很多服务都需要,那么就可以把这部分信息交给Nacos进行管理并且实现配置共享,从而实现配置的重用。
1)Nacos中新建common.yml
2)修改nacos-web工程配置文件,添加
spring:
application:
name: nacos-web
cloud:
nacos:
discovery:
server-addr: 192.168.200.128:8848
config:
server-addr: 192.168.200.128:8848
file-extension: yml #指定文件扩展名,默认为properties
prefix: nacos-web
#添加共享配置的dataId,如多个使用逗号分隔,并且越靠后,优先级越高
#文件后缀名不能少,只支持yaml,yml,properies
shared-dataids: common.yml
#哪些共享配置支持动态刷新,如多个使用逗号分隔
refreshable-dataids: common.yml
profiles:
active: dev #开发环境
server:
port: 9100
management:
endpoints:
web:
exposure:
include: "*"
#日志
logging:
level:
org.springframework.web: debug
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
3)InfoController中获取该值
4)导入demo工程
5)Nacos中创建example工程对应配置文件
web工程访问结果如下:
example访问结果如下: