现在主流的配置中心有以下几个:
1.spring-cloud-config
https://github.com/spring-cloud/spring-cloud-config
Spring Cloud组件之一,可以跟Spring Cloud项目无缝衔接
2.淘宝 diamond
3.disconf
https://github.com/knightliao/disconf
java开发,蚂蚁金服技术专家发起,业界使用广泛包括百度,顺丰等。
4.ctrip apollo
https://github.com/ctripcorp/apollo/
Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,具备规范的权限、流程治理等特性。
5.阿里nacos
https://github.com/alibaba/nacos
Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
spring-cloud-config是将配置文件保存到github仓库而且功能单一基本没人用,diamond已经没有维护了所以也不考虑,下面主要比较disconf、apollo、nacos这三个。
功能点 | 优先级 | disconf | apollo | nacos |
---|---|---|---|---|
统一管理 | 高 | 支持 | 支持 | 支持 |
多环境 | 高 | 支持 | 支持 | 支持 |
多集群 | 高 | 支持 | 支持 | 支持 |
多语言 | 中 | Java | 支持 | 支持 |
本地配置缓存 | 高 | 支持 | 支持 | 支持 |
配置校验 | 中 | 无 | 无 | 无 |
配置更新推送 | 高 | 支持 | 支持 | 支持 |
配置定时拉取 | 高 | 支持 | 支持 | 支持 |
版本管理 | 高 | 操作记录有落数据库,但无查询接口 | 支持 | 支持 |
配置回滚 | 高 | 不支持 | 支持 | 支持 |
用户权限管理 | 高 | 支持 | 支持 | 支持 |
灰度发布 | 中 | 不支持部分更新 | 支持 | 待支持 |
告警通知 | 中 | 支持,邮件方式告警 | 支持,邮件方式告警 | 支持,可以暴露metrics数据 |
单机读 | 高 | 暂无数据 | 9000 | 15000 |
单机写 | 高 | 暂无数据 | 1100 | 1800 |
相比之下disconf功能不够丰富,Apollo(阿波罗)和Ancos功能差不多,但是Ancos因为使用了HTTP异步通知的方式性能更高,而且当Spring Boot版本升级到2.X时可以用到作为注册中心(Eureka只支持Spring Boot 1.X版本),所以选择了nacos。
nacos是Spring Cloud Alibaba的开源项目之一,主要用于服务注册和发现,配置管理。
命名空间
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源隔离等。
配置ID
dataId就是这个配置的ID,需要保证全局唯一,整合Spring Cloud时有一个默认的命名规则。
配置分组
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
它们三者之间的关系如下图:
1.下载nacos server(nacos-server-1.2.1.zip),地址 https://github.com/alibaba/nacos/releases
2.windos系统解压之后的目录如下
#*************** Config Module Related Configurations ***************#
### If user 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
db.user=root
db.password=1234
5.进入bin目录,运行startup.cmd命令启动即可。
6.游览器输入http://localhost:8848/nacos/index.html即看到登录页面,默认账号密码nacos/nacos,建议修改。
注意: 版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。
5.设置项目启动环境为dev
方式一(推荐):
方式二:
6.在nacos管理后台添加配置文件
注意:
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${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 类型。
1.启动nacos-demo,访问地址http://localhost:9000/test,返回结果为true
2.修改nacos-demo-dev.yaml中test.enabled的值为false,再次访问结果为false,说明配置实时更新了。
将application.properties上的nacos.core.auth.enabled改为true,开启权限认证后项目就读取不到配置了,配置了用户名和密码也无效。
com.alibaba.nacos.api.exception.NacosException: <html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id=‘created‘>Sun Apr 26 16:06:15 CST 2020</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>
在github上 Issue发现该问题是因为现有的Spring Cloud版本不支持nacos server 1.2.0。
参考:官方文档
原文:https://www.cnblogs.com/2YSP/p/12780627.html