NET Core微服务之基于Apollo实现统一配置中心

Tip:此篇已加入.NET Core微服务基础系列文章索引

一、关于统一配置中心与Apollo

在微服务架构环境中,项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的配置中心,能做到自动更新配置文件信息,解决以上问题。

Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。其服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域No.1的产品,其成熟度和企业级特性要远远强于Spring Cloud体系中的Spring Cloud Config产品。

目前有针对Java和.Net的两个客户端供使用:

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有额外支持。

.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。

更多Apollo介绍请浏览Apollo配置中心介绍

二、Apollo的快速安装与基本配置

2.1 快速安装

Apollo GitHub中提供了一个让我们快速上手的Quick Start,帮助我们快速在本地环境部署,启动Apollo配置中心。这里主要集中于针对开发环境的本地部署(单击),要部署到生产环境,请参考Apollo分布式部署指南。

这里我使用的是Windows Server的虚拟机在本机搭的,当然你可以在你的Linux虚拟机中搭建,另外你也可以通过Docker更快捷地部署Apollo。

Step1.准备下列软件/环境

Java=> JDK 1.8+MySQL=> 5.6.6+GitbashApollo QuickStart

Step2.陆续安装Java JDK, MySQL与Git

Step3.导入脚本(从QuickStart目录中的sql文件夹中拷贝),导入的结果会创建两个数据库:

Step4.修改demo.sh中关于数据库连接的信息,主要是url、username与password

# apollo config db infoapollo_config_db_url=jdbc:mysql://192.168.80.70:3306/ApolloConfigDB?characterEncoding=utf8apollo_config_db_username=rootapollo_config_db_password=213224591# apollo portal db infoapollo_portal_db_url=jdbc:mysql://192.168.80.70:3306/ApolloPortalDB?characterEncoding=utf8apollo_portal_db_username=rootapollo_portal_db_password=213224591

Step5.通过以下命令启动(切换到quickstart的目录中),后续可以将其作为Windows服务,不过生产环境一般用Linux。

cmd>cd C:\Apollo\apollo-build-scripts-mastercmd>demo.sh start

启动后会最终显示以下信息:

==== starting service ==== Service logging file is ./service/apollo-service.log Started [3099] Waiting for config service startup....... Config service started. You may visit http://localhost:8080 for service status now! Waiting for admin service startup.... Admin service started ==== starting portal ==== Portal logging file is ./portal/apollo-portal.log Started [4071] Waiting for portal startup...... Portal started. You can visit http://localhost:8070 now!

看到上述信息显示完毕,证明我们的Apollo已经成功启动起来了,那么我们可以去这两个端口8080和8070去看看:

[8070 => Apollo 配置中心管理界面,默认账号:apollo/admin]

进入之后会看到一个示例项目SampleApp,点进去可以看到其中有一个示例配置applicaiton

[8080 => Eureka服务注册&发现,和Consul类似,因为Apollo采用了Eureka作为服务注册中心,对Apollo架构感兴趣的童鞋可以阅读波波老师的《

携程配置中心Apollo架构分析

》,这里不是本文的重点]

2.2 基本配置

Step1.创建一个新项目(这里部门可以自己在数据中编辑serverconfig表添加)

Step2.默认情况下,创建新项目后有一个默认的application的Namespace,我们删除它,然后重新创建我们要用到的配置。对于一般共用的数据库、Redis、RabbitMQ等配置,我们一般会将其放到一个Public的配置列表中,而每个项目中私有的配置信息(如Swagger文档的说明信息)我们会单独创建一个Private的配置列表给每个项目。

下图为创建一个共享的配置列表(在Apollo中称为Namespace,详细内容可以参考:Apollo核心概念之Namespace)

Step3.向Shared和ClientService两个Namespace中添加Key/Value配置项(可以通过文本形式添加,速度更快),添加之后记得点击发布,最终结果如下图所示:

现在配置都有了,开始和我们的ASP.Net Core集成把。

三、ASP.NET Core中集成Apollo

3.1 准备工作

导入.Net Core的客户端package,看这个名字Com.Ctrip.Framework.Apollo.Configuration应该是Java程序员写的,特别的Java Style.

PM>Install-Package Com.Ctrip.Framework.Apollo.Configuration

修改appsettings.json,添加apollo节点:指明apollo的AppId和Server地址 => AppId 用来标识应用身份的唯一id,Apollo客户端针对不同的环境会从不同的服务器获取配置 ,MetaServer 就是客户端获取配置的服务器配置

"apollo":{"AppId":"MSAD","MetaServer":"http://192.168.80.70:8080"}3.2 更改Program.cs

这里主要会在启动时读取appsettings.json中的AppId和MetaServer来连接Apollo,并且指定要读取哪个Namespace的配置项

publicstaticIWebHostBuildWebHost(string[]args)=>WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext,builder)=>{builder.AddApollo(builder.Build().GetSection("apollo")).AddDefault().AddNamespace("TEST3.Shared");.AddNamespace("ClientService");}).UseStartup().Build();3.3 更改StartUp.cs

对于StartUp.cs,它承担了很多初始化的注入工作,我们会在里边引入很多配置项,但是幸运的是我们不需要做太多更改,只是把配置项的Key换成Apollo中定义的即可。例如:

// IoC - DbContextservices.AddDbContextPool(options=>options.UseSqlServer(Configuration["DB"]));// Swaggerservices.AddSwaggerGen(s=>{s.SwaggerDoc(Configuration["Swagger.DocName"],newInfo{Title=Configuration["Swagger.Title"],Version=Configuration["Swagger.Version"],Description=Configuration["Swagger.Description"],Contact=newContact{Name=Configuration["Swagger.Contact:Name"],Email=Configuration["Swagger.Contact:Email"]}});......});

这里通过查看Swagger API文档来验证一下是否读出来了配置项Value:

更多内容,请参考Apollo的.Net core客户端分支:https://github.com/ctripcorp/apollo.net/tree/dotnet-core

这时如果我们在Apollo中更改了ClientService的Swagger.Title配置项并发布之后,重启一下ClientService,配置已经更改为下图所示:

四、小结

本篇简单介绍了一下统一配置中心与Apollo的基本概念,然后介绍了Apollo的快速安装(基于QuickStart)与基本配置,最后通过与ASP.NET Core的集成演示了如何在项目中使用Apollo替代原有的配置文件(appsettings.json)。当然,本篇只是一个QuickStart,更多的内容都没有覆盖,需要我们去看官方Wiki了解。Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,值得我们学习和了解。

参考资料

(1)min.jiang,《统一配置中心》

(2)张乐,《开源配置中心之Apollo》

(3)陈珙,《基于Windows Server部署Apollo初次体验》

(4)Apollo Quick Start:https://github.com/ctripcorp/apollo/wiki/Quick-Start

(5)Apollo GitHub:https://github.com/ctripcorp/apollo

(6)杨波,《携程配置中心Apollo架构分析》

(7)focus-lei,《.Net core使用Apollo做统一配置中心》

(8)张善友,《携程Apollo(阿波罗)配置中心在.NET Core项目快速集成》

(9)ctrip,《Apollo .Net客户端使用指南》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804G1G6JO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券