Apollo Config Service:提供配置的读取、推送等功能,服务对象是 Apollo 客户端。
Apollo Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal。
Apollo Portal:Apollo 的管理界面,进行不同项目的配置(项目配置、权限配置等),服务对象是开发者和开放平台API。
首先重要一点,要在windows下运行启动脚本demo.sh的前提是安装"MingW"不能用“CygWin”。因为在CygWin里运行java会报找不到jar文件的问题。
https://github.com/nobodyiam/apollo-build-scripts
运行sql目录中的两个sql脚本,如果原来有库注意备份。
设置两个数据库的账号和密码,以及数据库地址
使用git指令开启apollo
./demo.sh start
使用git指令关闭apollo
./demo.sh stop
http://localhost:8070
出现登录页面即为成功
参考这篇文章
部门:选择应用所在的部门。部门数据来自 ApolloPortalDB 库的 ServerConfig 表的 Key = organizations 对应的记录。
应用 AppId:用来标识应用身份的唯一 id,格式为 string,需要和客户端 app.properties 中配置的 app.id 对应。
应用名称:应用名,仅用于界面展示。
应用负责人:默认具有项目管理员权限。
项目管理员:可以创建 Namespace 和集群、分配用户权限。
public:
公共的Namespace的配置能被任何项目读取
通过创建公共Namespace可以实现公共组件的配置,或多个应用共享同一份配置的需求如果其它应用需要覆盖公共部分的配置,可以在其它应用那里关联公共Namespace,然后在关联的Namespace里面配置需要覆盖的配置即可如果其它应用不需要覆盖公共部分的配置,那么就不需要在其它应用那里关联公共Namespace
private:
私有Namespace的配置只能被所属的应用获取到
通过创建一个私有的Namespace可以实现分组管理配置私有Namespace的格式可以是xml、yml、yaml、json、txt.
已经存在的公共命名空间
再次创建一个应用,添加Namespace,选择关联公共,然后选择已有的公共Namespace
提交后,也可以配置覆盖选项
当我们读取Name,查看输入值
Namespace中添加Key/Value配置项(可以通过文本形式添加,速度更快),添加之后记得点击发布
1.添加灰度版本,会出现下面的界面
2.然后添加灰度规则,上面图片,已经添加了一条
添加一条配置信息
3.测试两个用例
配置项
现在是读取得灰度版本得配置信息,将灰度规则信息得AppId更改为MASD而配置文件不变,再次测试
这里是主版本得配置信息
现在点击全量发布
然后再次测试
现在发布到所有了,即使不满足灰度规则,也能访问
点击放弃灰度,然后就回到只有主版本界面
Install-Package Com.Ctrip.Framework.Apollo.Configuration
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.ConfigureAppConfiguration((hostingContext, builder) =>
{
builder
.AddApollo(builder.Build().GetSection("apollo"))
.AddDefault()
.AddNamespace("TEST2.Shared");
})
.UseStartup<Startup>();
});
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"apollo": {
"AppId": "MSAD", //AppId
"MetaServer": "http://192.168.136.129:8080", // Eureka地址
}
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Apollo.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly IConfiguration _configuration;
public WeatherForecastController( IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
var appName = _configuration["liutongyang"];
return new string[] { "value1", "value2", appName };
}
}
}