官网地址:https://github.com/ctripcorp/apollo
官方演示环境(Demo):
- 106.54.227.205:8070
- 账号/密码:apollo/admin
一、创建应用
在客户端接入 Apollo 之前,先在 Apollo 管理后台(106.54.227.205:8070)创建一个 appid为【sara0208】 应用,并添加配置项,如下:
二、创建 Namespace
在 Apollo 中,还可以通过建 Namespace 供应用进行关联使用。比如:有 N 个服务,每个服务有自己的配置信息,那就需要在 Apollo 中建 N 个应用,每个服务引用对应的应用配置,但有的配置可能是所有或部分服务都需要的,这时候就可以考虑创建一个公共的 Namespace 配置,需要这些配置信息的应用引用此 Namespace 即可。
通过应用右侧的 添加 Namespace 或者顶部的 管理员工具 进行 Namespace 的创建,然后在 Namespace 中添加配置项。
三、.NET Core客户端代码实现
Apollo .NET 客户端支持 .NET Framework 和 .NET Core ,这里以 .NET Core 为例来介绍,更多可参考:apollo.net 中的 Demo。
-
创建一个 .NET Core API 项目,添加
Com.Ctrip.Framework.Apollo.Configuration
NuGet 包 -
在 appsettings.json 添加 Apollo 配置信息
{
"apollo": {
"AppId": "sara0208", // 应用id
"MetaServer": "http://106.12.25.204:8080/",
"Env": "DEV"
}
}
3.修改 Program.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder => builder
.AddApollo(builder.Build().GetSection("apollo"))
.AddNamespace("sara.common") // 引入 TEST1.Common 命名空间
.AddDefault()) // 默认 namespace: application
.UseStartup<Startup>();
以上配置如果 Default 中具有 sara.Common 相同的 key,那么 Default 会覆盖掉 sara.Common 中相同 key 的值。
4.添加获取配置信息接口
public class ValuesController : Controller
{
private IConfiguration _configration;
public ValuesController(IConfiguration configuration)
{
_configration = configuration;
}
[HttpGet]
public async Task<object> Get()
{
await Task.CompletedTask;
return new
{
timeout = _configration["timeout"],
appkey = _configration["appkey"]
};
}
}
服务启动成功后,配置信息会注入到 IConfiguration 中,可以从容器中的 IConfiguration 对象获取具体配置。
5.启动并调用接口
https://localhost:44303/api/values
{"timeout":"800","appkey":"11111"}
在之前的介绍中提到了客户端拉取到配置信息之后,会在本地文件中进行缓存,目的是在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。经过以上测试,可以在以下目录进行查看缓存文件:
Mac/Linux: /opt/data/{appId}/config-cache
Windows: C:\opt\data\{appId}\config-cache
在缓存文件存的情况下,可以将 Apollo 服务全部 kill 进行测试,服务依然能拉起到配置信息。
Apollo 修改配置发布后是实时生效的,但有些情况下并不能反应出来,主要原因还是在代码的实现上,如果存在这样的情况,需要看看代码的具体实现。比如:配置信息赋给了静态变量、程序内部有自己的缓存策略等。
相关链接