Asp.Net Core与携程阿波罗(Apollo)的第一次亲密接触 (2)

1543245209761

注意检查数据库配置,确认无误后执行demo.sh,如果有报错多执行两次看看,因为我也有

“Config service failed to start in 120 seconds! Please check ./service/apollo-service.log for more information.”

这个报错,然后再次执行才启动成功的;

接着如提示访问 :8070

1542792843089

ok,我们登录看看,默认账号密码是:apollo/admin

我们看到已经有一个SampleApp,作为配置参考了

1542808265590

1542808341712

根据提示,我们再访问一下 8080 端口:

我知道 Eureka 是java那边比较喜欢用的服务注册中心,是一个跟consul差不多一样的东西,我也不太熟,先放着;

到这一步,Apollo我们已经安装成功了;接下来我们先参照SampleApp添加一个我们自己的app,为.net core程序的与她的亲密接触做准备;

1542808483430

四、创建/配置Apollo项目 4.1 新建项目

创建一个叫myDotnet的项目

部门数据在ApolloPortalDB库ServerConfig表里配置

1542809520034

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

1542814456082

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

Namespace例子

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;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygjwx.html