SpringCloud学习笔记(十九)apollo环境切换和命名空间

时间:2024-05-19 20:57:30

专辑目录:SpringCloud学习日志

上一篇,我们将apollo和自己的eureka整合,并且读取到参数了。这一篇,我们讲讲环境差异和命名空间等。

对于阿波罗的环境切换,我看了其他博客,说是configservice、adminservice、eureka等等除了portal和apolloportaldb外的都是在不同服务器部署,portal是可以共用的。

这是一种什么场景呢?公司正式服务器上部署了pro、uat、fat三个环境的configservice、eureka等,我们自己本机除了配置这些,还配置了portal,我们在开发时,portal用的是dev环境,连的是本机的configservice、eureka等,我们开发完成之后,把代码提交fat环境,然后把本机的portal改为连接fat环境,再修改参数。如此一来,fat、uat、pro就不需要部署portal。(我没有想通为什么不直接每个环境都部署,节省大家切环境的时间还不容易乱。)

由于我没有多台电脑也没有服务器(我不会为了演示一台电脑装多个mysql),所以没法演示实际差异,只能讲过程。

portal切环境很简单,只要改apollo-portal\src\main\resources\apollo-env.properties,把每个环境的configservice的地址配上去就行了。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

然后我们先按dev启动

SpringCloud学习笔记(十九)apollo环境切换和命名空间

然后关闭8080的,改成以端口8010启动

SpringCloud学习笔记(十九)apollo环境切换和命名空间

SpringCloud学习笔记(十九)apollo环境切换和命名空间

直接启动portal,虽然能启动,但是有很明显的报错

SpringCloud学习笔记(十九)apollo环境切换和命名空间

原因相信大家也知道了吧,因为数据库配的是dev环境,但是dev环境实际上没有启动。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

这时我们到数据库改成pro

SpringCloud学习笔记(十九)apollo环境切换和命名空间

再启动portal

SpringCloud学习笔记(十九)apollo环境切换和命名空间

没有报错了,并且能正常使用项目管理(之前启动报错时只能可能项目类别,点进去看不到配置并且提示错误)

SpringCloud学习笔记(十九)apollo环境切换和命名空间

所以我们就这样通过改数据库的方式切换了环境。

我们恢复为开发环境讲一下命名空间。

阿波罗为了能让配置中心适应于多应用、多环境、多场景,使一个项目管理中心就可以操控配置参数,所以除了上面的多环境以外,还增加了应用和命名空间的功能。

为了验证,我们在不同应用不同命名空间里取同一个参数名,去获取值判断是否不同。

命名空间有两种公共命名空间和室友命名空间。

公共命名空间的提示已经写得清楚了,所有应用都能读取到,一般共有的命名空间可以放公司名称或者公司官网地址等所有应用统一的配置。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

私有命名空间在不同应用中分别配置。应用就代表我们的项目,私有命名空间存放每个项目都独立配置的信息,比如项目名称、数据库的连接信息等。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

我之前已经创建了两个应用,一个是app_apollo,另一个是app_test。

我先在app_apollo创建一个公共命名空间publicA,里面新增一个参数companyName=“碧蓝航线”

SpringCloud学习笔记(十九)apollo环境切换和命名空间

然后切换到应用app_test。我们可以看到,并没有命名空间publicA。

SpringCloud学习笔记(十九)apollo环境切换和命名空间在member服务中设置appid为app_test来指定应用。然后修改了getConfigTest方法。我传入命名空间的名称和参数名来拿取值。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

跑起来之后先访问 getConfigTest/application/projectName  ,得到的结果和原来一样

SpringCloud学习笔记(十九)apollo环境切换和命名空间

然后去访问公共命名空间 getConfigTest/publicA/companyName ,看来比较顺利。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

我们再从app_apollo去修改companyName

SpringCloud学习笔记(十九)apollo环境切换和命名空间

稍等一会儿,刷新一下

SpringCloud学习笔记(十九)apollo环境切换和命名空间

确实能够实时从别的应用中创建的命名空间里取值呢。我们打开C盘,C:\opt\data\{appid}\config-cache下可以看到根据集群和命名空间分开保存的缓存,每次点发布后就会重新生成这个文件

SpringCloud学习笔记(十九)apollo环境切换和命名空间

如果我们定义了publicA里面存有10个配置项,在某个项目中我们只需要其中8个,有2个配置项我们希望另外配置,怎么办呢?

阿波罗提供了一个关联类型的命名空间来解决,相当于是先从关联类型的命名空间里面去找值,再从公共命名空间找值。

我们在app_test中关联app_apollo中添加的公共命名空间publicA。先点左下角的添加命名空间

SpringCloud学习笔记(十九)apollo环境切换和命名空间

SpringCloud学习笔记(十九)apollo环境切换和命名空间

选择publicA,点击提交,提示成功之后自动跳到了这个页面。这个页面是给用户设置权限,比如用户A可以在所有环境修改发布,用户B可以在开发环境修改发布,但在生产环境只能修改不能发布(下图不是演示)。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

不修改的话右上角返回。然后修改companyName的值并访问

SpringCloud学习笔记(十九)apollo环境切换和命名空间

SpringCloud学习笔记(十九)apollo环境切换和命名空间

图中明显表示是覆盖了公共命名空间的配置项,而且还可以对比,挺人性化的。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

那我们再从app_apollo去启动member服务然后来访问,读到的值应该还是“哔哩哔哩”,再新建一个应用去读得到的也是“哔哩哔哩”,我就不演示了。

接下来看私有命名空间,在app_apollo增加一个私有命名空间privateB并增加一个配置项projectTitile=“上班使我快乐”

SpringCloud学习笔记(十九)apollo环境切换和命名空间

然后把member的app.id设为app_apollo,重启,访问

SpringCloud学习笔记(十九)apollo环境切换和命名空间

再切回 app_test,访问。 果然是拿不到阿波罗上存的配置项,只拿到了代码中默认给的值。

SpringCloud学习笔记(十九)apollo环境切换和命名空间

所以最后总结一下命名空间:

1.在各服务中通过\src\main\resources\META-INF\app.properties 中配置app.id来决定应用

2.私有命名空间的配置项只能在该应用中读取

3.公共命名空间的配置项可以在任何应用中读取,可以通过关联进行配置项的覆盖。