Apollo Dotnet Core 2
1. 使用 Apollo 管理界面
1.1. 准备工作
部署完 apollo-portal 后,在浏览器里打开,输入默认账号密码 apollo/admin 登录。

虽然可以直接用超级管理员账号创建一些项目,但我们还是按照实际,先创建一些账号吧。
点击右上角 管理员工具 -> 用户管理,可以创建新用户。

然后我们打开数据库管理工具,在 ApolloPortalDB 的 ServerConfig 表中,修改 organizations 字段,替换为 开发组A

1.2. 创建、编辑与发布一个简单的项目配置
1.2.1. 创建项目
好了,现在我们退出管理员账号,用刚刚创建的账号登录,点击主页上的 创建项目,创建一个新项目 *app-test-1*,填写如下


这是项目 app-test-1 的管理界面,环境列表里有两个环境,DEV 是开发环境,FAT 是功能测试环境。实际上这里可以按照需要几个环境,就按照之前的方法部署几套,不过其中 apollo-portal 只需要部署一个就可以了,因为他用来管理多套环境。
左侧有关于这个项目的基本信息,其中重要的是 AppId,后面在代码中要用到,这个项目的 AppId 是 *a001*。
右边是 Namespace 列表。每个项目默认会自带一个名为 application 的私有且类型为 properties 的 Namespace,这相当于一个物理的配置文件 *application.properties*。
1.2.2. 编辑配置
有两种方式。
第一种,点击右上角的 新增配置,可以添加 key-value 形式的配置内容,并选择添加到哪个环境中,点击 提交。
第二种,切换到 文本 视图,直接对其编辑,不过这里保存的时候会校验格式是否正确。
1.2.3. 发布配置
刚才编辑的配置并不会立刻生效,需要发布才行。我们发布这个 Namespace,就可以生效了。

2. 在 .NET Core 中使用 Apollo
以 Web Api 项目为例
引用 Nuget 包
修改项目下的 appsettings.json
1{ 2 "apollo": { 3 "AppId": "a001", 4 "MetaServer": "http://<apollo-configservice-host>:<port>" 5 } 6}修改 Program.cs
1public static IWebHostBuilder CreateWebHostBuilder(string[] args) => 2 WebHost.CreateDefaultBuilder(args) 3 .ConfigureAppConfiguration((hostingContext, builder) => 4 { 5 builder 6 .AddApollo(builder.Build().GetSection("apollo")) 7 .AddDefault() // 默认添加了 Namespace 为 application 的配置信息 8 }) 9 .UseStartup<Startup>();在代码中使用
1string value = configuration["Hello"]; // "world"
3. 进阶功能
3.1. 公共 Namespace
一个 Namespace 就相当于一个物理的配置文件,所以我们自然可以添加多个配置,点击左下角的 添加 Namespace。

选择创建一个 Namespace,类型为私有的,并选择文件格式,比如 json。取名并返回。
注:这里的 Namespace 可以重复的,但是实际在使用中,尽量不要重复。因为后添加到程序中的 Namespace 会覆盖之前的,而且也会覆盖本地同样类型的配置文件。
那么对于一些公用的基础设施的配置(如 Redis),不想在每个项目中配置一遍,该怎么办呢?除了创建私有的 Namespace,还可以关联公共的 Namespace。
我们创建一个叫 PublicInfras 的项目,添加一个名为 devgroupA.Redis 的公共 Namespace。
注1:发现这里选不了公共 Namespace 的格式,是因为作者基于继承特性考量,properties 格式最适合。因此其他格式诸如 xml 和 yaml 暂不支持关联公共 Namespace 。 注2:但这不意味着我们不能创建公共的 xml 或其他格式的 Namespace 了,我们还是可以创建并使用,只不过不支持被其他应用关联,而且我们如果仅仅想使用一些公用 Namespace 而不覆盖其内容的话,完全没有必要做关联,直接使用这个公共的 Namespace 就可以了。

并添加如下:
Host = http://localhost:6379/[//]: # 回到 app-test-1 项目,添加一个 Namespace,现在可以关联刚刚创建的 devgroupA.Redis 公共 Namespace 了。
[//]: # 
[//]: # 然后发现我们关联的 Namespace 里什么都还没有:
[//]: # 
[//]: # 是因为刚刚我们没有发布。发布刚才的公共 Namespace,回来刷新一下:
[//]: # 
然后把这个 Namespace 在代码中 Add 一下,就可以获取到了。
1builder
2.AddApollo(builder.Build().GetSection("apollo"))
3.AddDefault()
4.AddNamespace("devgroupA.Redis", ConfigFileFormat.Properties);
3.2. 授权
对于一般的开发人员来说,开发环境可能我们需要频繁添加修改配置,而功能测试环境,不需要开发人员上去经常改动配置文件。所以我们需要按环境对不同的账号进行授权。
创建一个一般开发人员账号 *lisi*,然后用 zhangsan 的账号为每个 Namespace 授权。
点击右上方的 授权,把 DEV 环境的修改权、发布权授权给 lisi 这个账号。

用 lisi 账号登录,可以看到只有 DEV 环境的权限,而在 FAT 环境下,是无法查看、编辑、发布的。
