注册中心 + 配置中心 Nacos
Nacos 简介
在 Spring Cloud Netflix 阶段我们采用 Eureka 做作为我们的服务注册与发现服务器,现利用 Spring Cloud Alibaba 提供的 Nacos 组件替代该方案。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
nacos 注册中心工作流程
Nacos 安装
docker run --restart=always --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
查看 nacos 日志信息:docker logs nacos
访问地址
nacos 的默认端口号是 8848,珠穆朗玛峰的高度也是 8848 米呦!默认账号密码是 nacos/nacos
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)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: "*"
3)nacos-web 工程添加启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosWebApplication {
public static void main(String[] args) {
SpringApplication.run(NacosWebApplication.class,args);
}
}
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 ;
}
}
5)启动服务并查看效果
5)修改端口,查看 nacos 集群支持
Nacos 配置中心使用
基础使用
1)顶级父工程添加依赖
<!-- nacos配置中心依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)核心配置信息
注意:
配置文件必须是bootstrap.properties或者bootstrap.yml,如果配置application.properties或者application.yml会导致加载不到配置.
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
新建配置
配置文件名称 : 默认和 spring.application.name 一致
文件后缀 :默认是 properties
nacos 支持 6 种文件格式
测试 config 接口
动态刷新
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher
的 refresh 方法 。
如果需要对 Bean 进行动态刷新,参照 Spring 和 Spring Cloud 规范。推荐给类添加 @RefreshScope
进行自动刷新
多环境支持
我们在做项目开发的时候,可能会存在多种环境,并且每一种环境所设置的配置都是不同的,所以我们可能会在线上手工修改这些配置信息。同时 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
即为当前环境对应的 profilefile-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)nacos中新增配置信息
配置共享
不同环境下配置信息共享
在开发中,虽然可以在不同环境下使用不同的配置文件,但是有一些配置是通用的,需要在不同的环境下,都进行生效。
- 当开发环境为:dev 时。
- 当开发环境为:test 时。
根据上述测试,可以发现,不同的开发环境下都会去加载 nacos-web.yml ,也就是没有指定特定环境的文件。那么对于通用配置就可以设置在这个文件中。
更新 nacos 配置中心的 nacos-web.yml 。
InfoController 中获取该值
环境为 test:访问并获取结果
环境为 dev:访问并获取结果
不同应用间配置信息共享
在实际项目中,常常需要不同应用间配置共享。比如 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
3)InfoController 中获取该值
4)导入 demo 工程
5)Nacos 中创建 example 工程对应配置文件
web 工程访问结果如下:
example 访问结果如下:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于