官方文档
Nacos提供方用于储存配置和其他元数据的key/value储存,为分布式系统中的外部化配置提供服务器端和客户端支持。使用Spring Cloud Alibaba Nacos Config
,您可以在nacos Server集群中管理你的Spring Cloud应用的外部属性配置。
Spring Cloud Config对比
三大优势:
- Spring Cloud Config大部分场景结合git使用,动态变更还需要依赖Spring Cloud Bus消息总线来通过所有的客户端变化,不提供可视化界面。
- Nacos Config使用后长轮询更新配置,一旦配置有变动后,通知Provider的过程非常的迅速,从速度上秒杀Spring Cloud原来的config几条街
对比项目/配置中心 | Spring Cloud Config | Apollo | Nacos |
---|---|---|---|
开源时间 | 2014.9 | 2016.5 | 2018.6 |
配置实时推送 | 支持(Spring Cloud Bus) | 支持(HTTP长轮询1s内) | 支持HTTP轮询1s |
版本管理 | 支持(Git) | 支持 | 支持 |
配置回滚 | 支持(Git) | 支持 | 支持 |
灰度发布 | 支持 | 支持 | 待支持 |
权限管理 | 支持 | 支持 | 待支持 |
多集群多环境 | 支持 | 支持 | 支持 |
监听查询 | 支持 | 支持 | 支持 |
多语言 | 只支持Java | Go,C++,Python,Java,.net,OpenAPI | Python,Java,Nodejs,OpenAPI |
分布式高可用最小集群数量 | Config-Server2+Git+MQ | Config2+Admin3+Portal*2+Mysql=8 | Nacos*3+Mysql=4 |
配置格式校验 | 不支持 | 支持 | 支持 |
通讯协议 | HTTP和AMQP | HTTP | HTTP |
数据一致性 | Git保证数据一致性,Config-Server从Git读取数据 | 数据库模拟消息队列,Apollo定时读消息 | HTTP异步通知 |
单机读(tps) | 7(限流所致) | 9000 | 15000 |
单机写(tps) | 5(限流所致) | 1100 | 1800 |
3节点读 | 21(限流所致) | 27000 | 45000 |
3节点写 | 5(限流所致) | 3300 | 5600 |
配置管理界面
配置列表
(有一小部分在之前的《Spring Cloud alibaba之Nacos》中介绍过,这里就不重复说了)
这里用来存储项目中的所有的配置文件,点击右边的加号进行添加配置。
- Data ID:可以理解为配置文件的名称。Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
- Group:Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
配置格式常用的有yaml或者properties。
配置内容
user.name=赵毅梵
user.age=18
点击发布,回到配置管理界面后,可以看见刚才新增的配置文件发布成功
权限控制
权限控制模块可以新建用户,并赋予用户权限。
用户列表-创建用户-填写用户信息
我这里创建了一个用户名为
zhaoyifan
的用户。我们给
zhaoyifan
用户绑定一个角色名。角色管理-绑定角色
角色名最好见名知意,这里设置的是
public_r&w
意思就是只有访问public命名空间权限,并且可以读和写。最后
zhaoyifan
用户添加权限。权限管理-添加权限
这里我新建了一个dev工作空间,资源选择public。添加完成后登出,登录刚才新建的
zhaoyifan
用户。
可见public工作空间是可以正常访问并且修改的。当点击dev切换开发环境的时候就出现了弹窗阻断切换。
到这里,用户权限就配置完成了。
Client读取配置
在文章开头处点击《官方文档》,跟着文档的快速开始做就可以了,这里不过多重复。
@RefreshScope
@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScpoe注解
package com.mrZhao.config.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RequestMapping("/config")
@RestController
public class ConfigController {
@Value("${user.name}")
String name;
@RequestMapping("/show")
String show() {
return name;
}
}
网友评论