什么是Apollo
Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
那么Apollo能解决什么问题呢,在我们的微服务程序中,随着接入的中间件越来越多,相关的配置项也越来越多,如何对这些配置项进行统一管理就成了一个问题,若配置项需要改动,则直接在apollo中配置好进行推送,系统就可以直接升级,方便快捷。
Apollo的安装
由于apollo本地配置比较复杂,需要安装java相关环境和mysql,所以这里推荐使用docker一键部署,首先去github上下载apollo的源码,地址在这里https://github.com/ctripcorp/apollo,下载好源码之后,找到下图这个目录。
然后启动docker,进入到docker-quick-start
目录下,运行如下命令。
docker-compose up
这里时间比较长,需要下载mysql等相关的依赖,等待下载完成,可以用images命令查看一下。
docker images
这里就会发现多了两个镜像,一个mysql
一个apollo-quick-start
。接着运行ps
命令。
docker ps //查看正在运行的容器
docker ps -a //查看所有的容器
启动这两个容易即可。
这里有一点需要注意下,apollo中占用了两个端口8070
和8080
,
- 8070 为后台管理系统的地址端口号。
- 8080 为为外部服务提供接口的地址。
如果容器能正常启动,这时候打开localhost:8070看一下,若能出现如下页面表示登录成功。
用户名密码为:apollo / admin。
接着就可以创建项目了。
AppId 为整个项目中的唯一标识,之后在项目中是需要用到的。
项目创建好,接下来需要创建一个键值对了,这里是数据库连接字符串举例,每个服务都需要配置数据库连接字符串,所以就统一放到apollo中配置。
这里我已经配置好,并且发布了。好了接下来就该去代码中接入Apollo了。
.NET5接入Apollo
这里我们以商品服务举例,其他服务操作都是一样的,首先还是需要引入nuget包。
<PackageReference Include="Com.Ctrip.Framework.Apollo.Configuration" Version="2.4.1" />
接着在appsetting.json
中配置apollo的地址。
//Apollo的配置
"Apollo": {
"AppId": "easy-shop",
"Env": "DEV",
"MetaServer": "http://localhost:8080",
"ConfigServer": [ "http://localhost:8080" ]
}
注意这里的端口是8080,是apollo提供服务的地址。
然后需要修改下Program.cs
文件,把apollo的配置项加进去。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, builder) =>
{
builder.AddApollo(builder.Build().GetSection("Apollo")).AddDefault();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("https://*:5070").UseStartup<Startup>();
});
接着在Configuration
下就可以使用apollo了,例如获取数据库连接字符串。
//原始写法
services.AddDbContext<MySqlDBContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("MysqlConnectionString")));
//采用apollo的写法
services.AddDbContext<MySqlDBContext>(options =>
options.UseMySQL(Configuration.GetValue<string>("MysqlConnectionString")));
使用apollo来管理配置项之后,就可以把appsetting.json
下对应的配置项删除了。
总结
这里的apollo使用的比较简单,还有一些功能暂时没有涉及到,不过整体的使用就是这样。
项目地址:https://gitee.com/limeng66/easy-shop