
注意检查数据库配置,确认无误后执行demo.sh,如果有报错多执行两次看看,因为我也有
“Config service failed to start in 120 seconds! Please check ./service/apollo-service.log for more information.”
这个报错,然后再次执行才启动成功的;
接着如提示访问 :8070

ok,我们登录看看,默认账号密码是:apollo/admin
我们看到已经有一个SampleApp,作为配置参考了


根据提示,我们再访问一下 8080 端口:
我知道 Eureka 是java那边比较喜欢用的服务注册中心,是一个跟consul差不多一样的东西,我也不太熟,先放着;
到这一步,Apollo我们已经安装成功了;接下来我们先参照SampleApp添加一个我们自己的app,为.net core程序的与她的亲密接触做准备;

四、创建/配置Apollo项目
4.1 新建项目
创建一个叫myDotnet的项目
部门数据在ApolloPortalDB库ServerConfig表里配置

提交后我们看到如下提示,什么是Namespace??擦 需要补课;

4.2 什么是Namespace
官方Apollo核心概念之Namespace已经讲得很清楚了。这里是我的理解,看看能不能概括一下:
Apollo每一个项目下面都可以有多个Namespace,每一个Namespace都类似于我们开发中的一个配置文件。比如appsetting.json
Namespace有两种权限(对客户端读取设置的权限):
private:只能被所属的应用获取到,像放在当前运行程序目录下的配置;
public:共有的配置,能被所有的引用获取到。像放在共享目录的配置;
Namespace有三种类型(归类,给不同的归类设置不同的权限属性):
私有类型:私有类型的Namespace具有上诉的private权限。
公共类型:公共类型的Namespace具有上诉public权限,即任何应用都可获取;
关联类型(继承类型):比如我们经常配置的timeout,公共配置timeout=60;,然后我本地可以配置的一个timeout=90;覆盖公共配置这种情景;
4.2.2 示例
如下图所示,有三个应用:应用A、应用B、应用C。
应用A有两个私有类型的Namespace:application和NS-Private,以及一个关联类型的Namespace:NS-Public。
应用B有一个私有类型的Namespace:application,以及一个公共类型的Namespace:NS-Public。
应用C只有一个私有类型的Namespace:application

2.2.1 应用A获取Apollo配置
//application
Config appConfig = ConfigService.getAppConfig();
appConfig.getProperty("k1", null); // k1 = v11
appConfig.getProperty("k2", null); // k2 = v21
//NS-Private
Config privateConfig = ConfigService.getConfig("NS-Private");
privateConfig.getProperty("k1", null); // k1 = v3
privateConfig.getProperty("k3", null); // k3 = v4
//NS-Public,覆盖公共类型配置的情况,k4被覆盖
Config publicConfig = ConfigService.getConfig("NS-Public");
publicConfig.getProperty("k4", null); // k4 = v6 cover
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
2.2.2 应用B获取Apollo配置
//application
Config appConfig = ConfigService.getAppConfig();
appConfig.getProperty("k1", null); // k1 = v12
appConfig.getProperty("k2", null); // k2 = null
appConfig.getProperty("k3", null); // k3 = v32
//NS-Private,由于没有NS-Private Namespace 所以获取到default value
Config privateConfig = ConfigService.getConfig("NS-Private");
privateConfig.getProperty("k1", "default value");
//NS-Public
Config publicConfig = ConfigService.getConfig("NS-Public");
publicConfig.getProperty("k4", null); // k4 = v5
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
2.2.3 应用C获取Apollo配置
//application
Config appConfig = ConfigService.getAppConfig();
appConfig.getProperty("k1", null); // k1 = v12
appConfig.getProperty("k2", null); // k2 = null
appConfig.getProperty("k3", null); // k3 = v33
//NS-Private,由于没有NS-Private Namespace 所以获取到default value
Config privateConfig = ConfigService.getConfig("NS-Private");
privateConfig.getProperty("k1", "default value");
//NS-Public,公共类型的Namespace,任何项目都可以获取到
Config publicConfig = ConfigService.getConfig("NS-Public");
publicConfig.getProperty("k4", null); // k4 = v5
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
仔细看完示例应该理解了,如果实在不了解,我们后面用示例自己去体会;
4.3 添加Namespace和配置项
我们在上面的myDotnet项目下面,分别添加一个Public类型的Namespace和一个Private类型的Namespace;
其中:
Hei.Public:Public类型,存放Mongodb连接,Redis连接等几乎每个程序都需要用到的公共配置;
Hei.Private:Private类型,存放当前web应用程序需要使用的连接,比如title,keyword,description;