前文
SpringCloud —— 服务注册进 Eureka 集群
SpringCloud —— SpringCloud Consul 实现服务注册中心
SpringCloud —— HystrixDashboard 服务监控
SpringCloud —— Sleuth 分布式请求链路跟踪
SpringCloud Alibaba —— Nacos 服务注册
SpringCloud Alibaba —— Nacos 配置中心
文章目录
多环境多项目管理问题
问题一:
- 实际开发中,通常一个系统会准备
- dev 开发环境
- test 测试环境
- prod 生产环境
- 如何保证指定环境启动时服务能正确读取到 Nacos 上相应环境的配置文件呢?
问题二:
- 一个大型分布式微服务系统会有很多的微服务子项目
- 每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境…
- 那么怎么对这些微服务配置进行管理呢?
Nacos 的图形化管理界面
配置管理
命名空间
Namespace + Group + Data ID 三者关系
Namespace + Group + Data ID 是什么?
类似 Java 里面的 package 名和类名
最外层的 namespace 是可以用于区分部署环境的,Group 和 DataID 逻辑上区分两个目标对象
三者关系
默认情况:
Namespace = public,Group = DEFAULT_GROUP,默认 Cluster 是 DEFAULT
为什么这样设计?
Nacos 默认的命名空间是 public,Namespace 主要用来实现隔离
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个 Namespace,不同的 Namespace 之间是隔离的
Group 默认是 DEFAULT_GROUP,Group 可以把不同的微服务划分到同一个分组里面去
Service 就是微服务;一个 Service 可以包含多个 Cluster(集群),Nacos 默认 Cluster 是 DEFAULT,Cluster 是对指定微服务的一个虚拟划分。比方说为了容灾,将 Service 微服务分别部署在了杭州机房和广州机房
这时就可以给杭州机房的 Service 微服务起一个集群名称(HZ),给广州机房的 Service 微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能
最后是 Instance,就是微服务的实例
三种方案加载配置
DataID 方案
指定 spring.profile.active 和配置文件的 DataID 来使不同环境下读取不同的配置
默认空间 + 默认分组 + 新建 dev 和 test 两个 DataID
在该界面点击 + 号,添加新的配置
编写配置,点击发布
现在该界面的 DEFAULT_GROUP 已经有两个配置文件,这里 dev 表示开发环境,test 表示测试环境
通过 spring.profile.active 属性就能进行多环境下配置文件的读取
这里的 active 配置的是什么就加载什么
测试
启动主启动类 ,访问 http://localhost:3377/config/info
Group 方案
通过 Group 实现环境区分
在 Nacos 图形界面控制台上面新建配置文件 DataID
新建两个配置,然后放到不同的 GROUP 里面去
同名的文件放到不同的 GROUP 里面
bootstrap + application
在 config 下增加一条 group 的配置即可,可配置为 DEV_GROUP 或 TEST_GROUP
访问 http://localhost:3377/config/info
将 group 改为 DEV_GROUP
访问 http://localhost:3377/config/info 也是 OK 的
Namspace 方案
新建 dev / test 的 Namespace
点击命名空间选项,然后点击新建命名空间按钮
再新建一个
可以发现,dev 和 test 都是可以删除的,但是 public 是不可以删除的
回到服务管理-服务列表查看
现在有命名空间 public、dev、test
这是命名空间 dev
这是命名空间 test
按照域名配置填写
在 dev 下新建配置
现在 dev 下有三个配置文件
YML
那么如何去访问这些配置文件呢?很简单,拷贝这个 dev 的 id
将 id 放到 bootstrap.yml 文件里面(注意 group,这里只会访问 gorup 为 DEV_GROUP 组的配置文件),如下:
启动服务,访问 http://localhost:3377/config/info 也是 OK 的
如果想访问 dev 组里面不同的配置文件,只需要修改 bootstrap.yml 文件里面的 group 即可
完整代码已上传至码云 完整代码地址,感兴趣的朋友可以下载运行下