nacos1.2.0初探
文章目录
背景
- 我们没有配置中心,项目越来越多,配置管理起来比较麻烦;更改一个配置参数,a首先要登录服务所在的服务器,b然后更新配置,c然后重启服务,d然后验证,f然后把本次修改的配置文件,再更新部署文档力做一个更新。如果验证出现问题,从上面的执行步骤再走一遍;整体流程简单概括有下面几个问题:
A 配置更改需要重启
B配置更改无法回溯,没有记录 ,不支持回滚。谁改了?什么时候改的?改了什么?一无所知。
C更改一个配置步骤繁琐,个人觉得,例如菏泽或者科信委给他们更新一个配置;先向日葵,后跳板机,再服务器间跳转登录好麻烦。 - springcloud是我们组目前使用微服务技术架构。springcloud提供的原生组件SpringCloudConfig,*面管理,且需要git,SpringCloudBus、Mq支持其动态更新,好麻烦;
本文概述
因为我们这边注册中心使用的是物联网的的注册中心,所以这边就先不介绍Nacos做为注册中心的相关功能以及Nacos其它功能;目前第一版本先用nacos的单机版本;本文聚焦使用Nacos做为配置中心实战。
为什么要用Naocs配置中心?
传统静态配置的缺陷:
配置散乱格式不标准;配置一般采用本地静态配置,修改麻烦;环境越多越容易引发事故;配置修改无法追溯;配置缺乏动态刷新机制;要重启服务,配置才能更新;
- 减少和避免上述发生的问题
- Nacos友好的控制台界面
- 无缝支持 Spring Cloud,为 Spring Cloud 用户其提供更简便的配置中心
- Nacos支持目前几乎所有主流的微服务生态体系
- 支持动态的配置管理,将服务的配置信息分环境分类别外部管理,并且支持热更新
- Nacos的配置信息存储与数据库中,支持配置信息的监听和版本回滚
- 社区活跃,不断在迭代。Nacos目标明确,Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。Nacos有望成为未来的微服务架构。
Nacos1.2.0术语简介
- Namespace命名空间;不同租户的配置在命名空间下相互隔离;
- Group同一个租户下的配置还可以通过组的配置做一层隔离
- DataID 一个配置的唯一标识,微服务自动与之匹配,匹配规则
${prefix}-${spring.profile.active}.${file-extension}
Nacos1.2.0 maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
Nacos1.2.0配置解读
bootstrap.properties
例如这个配置出来的服务名称配置对应
#dss命名空间下的DEFAULT_GROUP分组下的
dss-dev.properties
#指定开发环境
spring.profiles.active=dev
#服务名称
spring.application.name=dss
#nacos服务器地址
spring.cloud.nacos.config.server-addr=${NACOS_SERVER:127.0.0.1:8848}
#默认是Public
spring.cloud.nacos.config.namespace=${NACOS_NAMESPACE:dss}
#文件名 -- 如果没有配置则默认为 ${spring.appliction.name}
spring.cloud.nacos.config.prefix=${spring.appliction.name}
#指定文件后缀
spring.cloud.nacos.config.file-extension=${NACOS_EXTENSION:properties}
#分组
spring.cloud.nacos.config.group=${NACOS_GROUP:DEFAULT_GROUP}
Nacos1.2.0注解解读
@RefreshScope 配置文件自动刷新
Nacos1.2.0租户权限分配(目前1.2.0没有全面支持,jar包没升级,可以先忽略)
- 使用管理员账号登录Nacos控制台
默认超级账号:nacos/nacos
- 管理用户
- 管理角色
- 管理权限
- 工程初始化时Application加上这段代码
Properties properties = new Properties();
properties.put(PropertyKeyConst.NAMESPACE, "你的命名空间");
properties.put(PropertyKeyConst.SERVER_ADDR, "配置中心地址");
// 配置用户名:
properties.put(PropertyKeyConst.USERNAME, "用户名");
// 配置密码:
properties.put(PropertyKeyConst.PASSWORD, "密码");
ConfigService iconfig = NacosFactory.createConfigService(properties);
备注:给租户分配命名空间的权限。 Public命名空间也要分配一下。用于共享。不配置的话,切换到dss租户下会报错
实战
- 第一步引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
备注:springboot的版本和springcloud的版本和我这个保持一致否则可能出现其它问题.
springboot和nacos配置中心用2.1.1.RELASE版本 Springcloud 用Greenwich.SR3
- 第二步:加点配置 bootstrap.properties
与其对应的配置dss.yml
# dataId ${prefix}-${spring.profile.active}.${file-extension}
#指定开发环境
#spring.profiles.active=dev
#服务名称
#spring.application.name=dss
#spring.cloud.nacos.config.namespace=dss
#文件名 -- 如果没有配置则默认为 ${spring.appliction.name}
#spring.cloud.nacos.config.prefix=dss
#指定文件后缀
spring.cloud.nacos.config.file-extension=yml
#分组
spring.cloud.nacos.config.group=DEV
- 第三步:Nacos配置中心也点东西
- 第四步:项目跑起来
备注:@RefreshScope定时刷新
- 第五步 验证
已经能做到到不停机拿配置了。
备注:nacos的dataId和bootstrap.properties是怎么一一对应的,详细见Nacos1.2.0术语简介的第三点。
nacos的写的配置优先级是最高的,比jar外置的application.properties还要高,完全可以把nacos和微服务的启动结合起来。
结束语
nacos在基本包含了微服务的所有模块,本文着重介绍了nacos做为配置中心的简单使用;
目前官网推荐使用的版本是1.4.1,我部署的官网最新nacos1.2.0。在使用nacos1.2.0使用过程中我发现官网jar包还没有更新,现在是2020年3月17日,估计过一个月这个1.2.0就会全面支持,我把nacos权限配置开关了,当前版本功能就和1.4.1保持一致了。上面多租户的权限隔离,后面会出来,现在我们的项目如果使用,只能通过命名空间,分组来做隔离。
对于有背景介绍没有配置中心的,或者想又一个更好用配置中心的,Nacos是一个不错的选择。