应用接入 Nacos
Nacos 的服务注册与发现
1. 编辑pom.xml,加入必要的依赖配置
org.springframework.cloud
spring-cloud-alibaba-dependencies
0.9.0.RELEASE
pom
import
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
-
dependencyManagement
:spring cloud alibaba
的版本,由于spring cloud alibaba
还未纳入spring cloud 的主版本管理中,所以需要自己加入。 -
dependencies
:当前应用要使用的依赖内容。这里主要新加入了 Nacos 的服务注册与发现模块:spring-cloud-starter-alibaba-nacos-discovery
。由于dependencyManagement
中已经引入了版本,这里就不用指定具体版本了。
2. 配置服务名称和 Nacos 地址
spring.application.name= xxx
#使用 Nacos 作为服务注册中心
spring.cloud.nacos.discovery.server-addr= xxx
说明
- server-addr :填写 Nacos 集群的全部服务地址,逗号分隔。
3. 添加注解
在 SpringBoot 启动类上添加 @EnableDiscoveryClient
;但不是必须的。只要添加了 spring-cloud-starter-alibaba-nacos-discovery
依赖,就会自动注册到 Nacos 上。
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientApplication {
...
}
启动应用
我们可以访问 Nacos 的管理页面:地址 xxxx
这里会显示当前注册的所有服务,以及每个服务的集群数目、实例数、健康实例数。
点击详情,可以看到每个服务具体的实例信息,如下图所示:
Nacos 作为配置中心
1. 编辑pom.xml,加入必要的依赖配置
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
. 修改配置
spring.cloud.nacos.config.server-addr= xxx
注意:
这里必须使用 bootstrap.properties
同时,spring.application.name
值必须 Nacos 中创建的配置 Data Id
匹配
3. 添加注解
在 引入配置文件的类上增加 @RefreshScope
注解,表示这个类下的配置内容支持动态刷新
@RefreshScope
public class NacosClientController {
@Value("${value}")
private String value;
}
Nacos 管理配置
创建配置项
-
进入Nacos控制台,点击导航栏的“配置列表”,然后点击右侧的“+” 按钮,如下图所示:
-
新建配置项
多环境管理
在 Nacos中,本身有多个不同管理级别的概念,包括:Data ID、Group、Namespace。
使用 Data ID 与 profiles 实现
Data Id 完整格式为:${prefix}-${spring.profile.active}.${file-extension}
。
- prefix 默认为
spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。 - spring.profile.active 即为当前环境对应的 profile ,详情可以参考 Spring Boot文档。
**注意:当spring.profile.active
为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
- file-exetension为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
使用Group实现
通过不同的 Group ,可以根据不同的环境使用不同的配置,但是它们的 Data ID 是完全相同的。
如图:
此时项目的配置文件需要根据添加 group 来区分
spring.cloud.nacos.config.group=DEV_GROUP
使用 Namespace 实现
Namespace 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。
常用于不同环境的配置的区分隔离,例如:开发测试环境和生产环境的资源(如配置、服务)隔离等。
-
命名空间配置页面
-
修改应用的配置文件,增加Namespace的指定配置。
spring.cloud.nacos.config.namespace= xxx
注意:若使用 namespace ,服务注册与发现也应加上 namespace 相关配置
spring.cloud.nacos.discovery.namespace= xxx
- namespace :用来区分不同环境的服务注册中心,等同于 Apollo 的 DEV,PRO。可以通过登陆 Nacos 管理页面获取,注意使用的是 ID ,不能使用环境的名称,默认的是 defalut 空间。
三种方式的区别
-
第一种:通过Data ID与profile实现。
优点:这种方式与Spring Cloud Config的实现非常像,用过 Spring Cloud Config 的用户,可以毫无违和感的过渡过来,由于命名规则类似,所以要从 Spring Cloud Config 中做迁移也非常简单。
缺点:这种方式在项目与环境多的时候,配置内容就会显得非常混乱。配置列表中会看到各种不同应用,不同环境的配置交织在一起,非常不利于管理。
建议:项目不多时使用,或者可以结合 Group 对项目根据业务或者组织架构做一些拆分规划。 -
第二种:通过 Group 实现。
优点:通过Group按环境讲各个应用的配置隔离开。可以非常方便的利用 Data ID 和 Group 的搜索功能,分别从应用纬度和环境纬度来查看配置。
缺点:由于会占用Group纬度,所以需要对 Group 的使用做好规划,毕竟与业务上的一些配置分组起冲突等问题。
建议:这种方式虽然结构上比上一种更好一些,但是依然可能会有一些混乱,主要是在 Group 的管理上要做好规划和控制。 -
第三种:通过 Namespace 实现。
优点:官方建议的方式,通过 Namespace 来区分不同的环境,释放了 Group 的自由度,这样可以让 Group 的使用专注于做业务层面的分组管理。同时,Nacos 控制页面上对于 Namespace 也做了分组展示,不需要搜索,就可以隔离开不同的环境配置,非常易用。
缺点:没有啥缺点,可能就是多引入一个概念,需要用户去理解吧。
建议:直接用这种方式长远上来说会比较省心。
多文件加载与共享配置
很多系统根据模块来定义配置文件,比如DB配置,日志配置等,可以用下面方法加载
加载多个配置
spring.cloud.nacos.config.ext-config[0].data-id=db.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
...
共享配置
spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties
spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties
-
spring.cloud.nacos.config.shared-dataids
参数用来配置多个共享配置的 Data Id,多个的时候用逗号分隔。 -
spring.cloud.nacos.config.refreshable-dataids
参数用来定义哪些共享配置的 Data Id 在配置变化时,应用中可以动态刷新,多个 Data Id 之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新。
配置加载的优先级
在使用Nacos配置的时候,主要有以下三类配置:
- A: 通过
spring.cloud.nacos.config.shared-dataids
定义的共享配置 - B: 通过
spring.cloud.nacos.config.ext-config[n]
定义的加载配置 - C: 通过内部规则
( spring.cloud.nacos.config.prefix
、spring.cloud.nacos.config.file-extension
、spring.cloud.nacos.config.group
) 这几个参数拼接出来的配置
优先级关系是:A < B < C
Nacos 替换 Eureka
-
添加 Nacos 的依赖,同时去掉 Eureka依赖
org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery 0.2.1.RELEASE -
修改application.properties
spring.cloud.nacos.discovery.server-addr = xxx
更换
@EnableEurekaClient
注解(可选)
更多学习内容,请关注公众号,一起进步。