Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET Core微服务之基于Apollo实现统一配置中心

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

原创
作者头像
Edison Zhou
修改于 2018-08-07 16:01:15
修改于 2018-08-07 16:01:15
2.3K00
代码可运行
举报
文章被收录于专栏:EdisonTalkEdisonTalk
运行总次数:0
代码可运行

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+ Gitbash Apollo QuickStart

  Step2.陆续安装Java JDK, MySQLGit

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

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

# apollo config db info apollo_config_db_url=jdbc:mysql://192.168.80.70:3306/ApolloConfigDB?characterEncoding=utf8 apollo_config_db_username=root apollo_config_db_password=213224591 # apollo portal db info apollo_portal_db_url=jdbc:mysql://192.168.80.70:3306/ApolloPortalDB?characterEncoding=utf8 apollo_portal_db_username=root apollo_portal_db_password=213224591

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

cmd>cd C:\Apollo\apollo-build-scripts-master cmd>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 就是客户端获取配置的服务器配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "apollo": {
    "AppId": "MSAD",
    "MetaServer": "http://192.168.80.70:8080"
  }

3.2 更改Program.cs

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, builder) =>
                {
                    builder
                    .AddApollo(builder.Build().GetSection("apollo"))
                    .AddDefault()
                    .AddNamespace("TEST3.Shared");
                    .AddNamespace("ClientService");
                })
                .UseStartup<Startup>()
                .Build();

3.3 更改StartUp.cs

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // IoC - DbContext
    services.AddDbContextPool<ClientDbContext>(
                options => options.UseSqlServer(Configuration["DB"]));

    // Swagger
    services.AddSwaggerGen(s =>
    {
        s.SwaggerDoc(Configuration["Swagger.DocName"], new Info
        {
            Title = Configuration["Swagger.Title"],
            Version = Configuration["Swagger.Version"],
            Description = Configuration["Swagger.Description"],
            Contact = new Contact
            {
                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配置项并发布之后(因为我们的Swagger在启动时注入的,所以无法获取实时更新的值),重启一下ClientService,配置已经更改为下图所示:

对于需要实时获取更新的item,我们也可以做一个测试,比如在一个Controller中获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [Route("api/Values")]
    public class ValuesController : Controller
    {
        private IConfiguration _configuration;

        public ValuesController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        [HttpGet]
        public IActionResult Get()
        {
            string title = _configuration.GetValue<string>("Service_Swagger_Title");

            return Json(title);
        }
    }

  第一次获取Title为:

  修改Title为:CAS Premium Service API v4

  刷新浏览器,已经实时更新:

四、小结

  本篇简单介绍了一下统一配置中心与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客户端使用指南

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ABP微服务系列学习-对接Apollo配置中心
前面我们把服务都已经成功启动,并且对接前端Angular界面。 但是在微服务结构中,多个服务意味着需要配置多个配置文件,这时就需要引入配置中心这玩意了。 配置中心有很多现成的方案,比如携程的阿波罗,K8S自带的ConfigMap等等。 这里介绍一下如何对接携程的阿波罗配置中心。
饭勺oO
2023/10/18
2980
ABP微服务系列学习-对接Apollo配置中心
快速学习-Apollo配置中心搭建
Apollo (阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
cwl_java
2020/07/16
3.3K0
微服务中集成分布式配置中心 Apollo
随着业务的发展、微服务架构的升级,服务的数量、程序的配置日益增多(各种微服务、各种服务器地址、各种参数),传统的配置文件方式和数据库的方式已无法满足开发人员对配置管理的要求:配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制。分布式环境下,这些配置更加复杂。
aoho求索
2019/06/02
8780
.NET Core + K8S + Apollo 玩转配置中心
如官网所述:Apollo 是携程打造的开源配置中心,GitHub的星星也快点满22K,因此足见它的成熟度和社区活跃度。因此最近在做配置中心选型的时候,经过一番预演,最终敲定Apollo。
圣杰
2020/08/20
1.1K0
.NET Core + K8S + Apollo 玩转配置中心
携程Apollo(阿波罗)配置中心在.NET Core项目快速集成
.NET Core的支持文档大体上可以参考文档.Net客户端使用指南:https://github.com/ctripcorp/apollo/wiki/.Net%E5%AE%A2%E6%88%B7%E
张善友
2018/03/28
1.5K1
携程Apollo(阿波罗)配置中心在.NET Core项目快速集成
初探Apollo远程服务配置中心
Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
闫同学
2023/10/14
4220
Apollo 配置中心的部署与使用经验
准备好 compose.yml 及 。/initsql/初始化脚本,修改其中的 IP
易墨
2023/11/01
2.9K0
Apollo 配置中心的部署与使用经验
快速学习-Apollo从入门到精通
Apollo (阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
cwl_java
2020/08/04
1.6K0
快速学习-Apollo从入门到精通
分布式配置中心之Apollo实战
微服务架构下,服务的数量视项目的规模大小而定,但数量肯定最少有十几二十个,这些微服务有时候共用一些配置,修改一个配置,这诸多服务都要跟着一起改。任务繁多,而且容易出错。
行百里er
2021/07/14
1.6K0
微服务之SpringCloud架构第六篇(上)——配置中心(Apollo)
引入配置中心,需要考虑和现有项目的兼容性,以及是否引入额外的第三方组件。我们的java项目以SpringBoot为主,需要重点关注springboot支持性。
leehao
2025/02/11
2590
微服务之SpringCloud架构第六篇(上)——配置中心(Apollo)
Spring Boot 2.0 整合携程Apollo配置中心
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
JAVA葵花宝典
2019/06/19
9310
apollo入门demo实战(二)
  通过上述测试已经实现了后台页面配置实时修改,客户端实时接收修改配置值,我们已经初步了解apollo的基本功能,接下来需要研究下客户端需要如何配置才能实现需求了,下章继续^_^
老梁
2019/09/10
9190
基于Linux搭建开源配置管理中心apollo
Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
星哥玩云
2022/05/28
1.1K0
基于Linux搭建开源配置管理中心apollo
Apollo配置中心,配置也可以“智能”
Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
java技术爱好者
2020/10/30
2.5K0
Apollo配置中心,配置也可以“智能”
Apollo配置中心源码编译及搭建
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。目前从官网看Apollo提供了Java和.Net的客户端接入sdk。
BUG弄潮儿
2020/08/04
9520
Apollo配置中心源码编译及搭建
携程 Apollo 配置中心传统 .NET 项目集成实践
可能由于 Apollo 配置中心的客户端源码一直处于更新中,导致其相关文档有些跟不上节奏,部分文档写的不规范,很容易给做对接的新手朋友造成误导。
Esofar
2019/08/07
8310
携程 Apollo 配置中心传统 .NET 项目集成实践
Apollo - 企业级配置中心的快速部署
下载页:https://github.com/ctripcorp/apollo/releases
十毛
2019/03/27
1.5K0
Apollo - 企业级配置中心的快速部署
芋道 Apollo 极简入门
本小节,参考《Apollo 部署文档 —— 分布式部署指南》和《Apollo 部署文档 —— Quick Start》文章,我们来单机部署一个 Apollo 服务。如下图所示:
芋道源码
2020/05/16
1.4K0
apollo-1:apollo配置中心单机模拟分布式部署--Step by Step
1.随着微服务和容器化大行起到,配置中心的重要性越来越高,携程的apollo(几月eureka)是其中的佼佼者。
千里行走
2019/07/03
7590
服务器之Apollo单机部署(快速安装)
Apollo官网:https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 官网单机部署的方式分为两种:普通部署和docker部署。
xbhog
2022/10/31
1.4K0
服务器之Apollo单机部署(快速安装)
推荐阅读
相关推荐
ABP微服务系列学习-对接Apollo配置中心
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档