.NET Core 下使用 Apollo 配置中心

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

Apollo开源地址:https://github.com/ctripcorp/apollo

更多产品介绍可以查看Apollo配置中心介绍,本篇主要介绍在 .NET 环境下如何使用 Apollo 配置中心。

Quick Start

  • 本地部署:https://github.com/ctripcorp/apollo/wiki/Quick-Start

  • Docker部署:https://github.com/ctripcorp/apollo/wiki/Apollo-Quick-Start-Docker部署

  • 分布式部署:https://github.com/ctripcorp/apollo/wiki/分布式部署指南

为了方便,本次我选择使用Docker部署,快速运用。

另外需要说明的是,不管是Docker方式部署Quick Start还是常规方式部署的,Quick Start只是用来快速入门、了解Apollo。如果部署Apollo在公司中使用,请参考分布式部署。

请确保开发环境有docker环境,然后下载docker-compose.yml和所需的sql文件,然后在根目录执行docker-compose up,一次执行会触发下载镜像等操作,需要耐心等待一些时间。

version: '2'services:apollo-quick-start:image: nobodyiam/apollo-quick-startcontainer_name: apollo-quick-startdepends_on:- apollo-dbports:- "8080:8080"- "8070:8070"links:- apollo-dbapollo-db:image: mysql:5.7container_name: apollo-dbenvironment:TZ: Asia/ShanghaiMYSQL_ALLOW_EMPTY_PASSWORD: 'yes'depends_on:- apollo-dbdataports:- "13306:3306"volumes:- ./sql:/docker-entrypoint-initdb.dvolumes_from:- apollo-dbdataapollo-dbdata:image: alpine:latestcontainer_name: apollo-dbdatavolumes:- /var/lib/mysql

搜索所有apollo-quick-start开头的日志,看到以下日志说明启动成功:

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

数据库的端口映射为13306,所以如果希望在宿主机上访问数据库,可以通过localhost:13306,用户名是root,密码留空。如要查看更多服务的日志,可以通过docker exec -it apollo-quick-start bash登录, 然后到/apollo-quick-start/service和/apollo-quick-start/portal下查看日志信息。

访问http://localhost:8070,可以看到ApolloUI界面,默认账号密码为:apollo/admin

.NET Core 接入

新建一个 ASP.NET Core API项目,ApolloDemo,添加组件Com.Ctrip.Framework.Apollo.Configuration

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

Apollo配置中心的 .NET 集成包开源地址:https://github.com/ctripcorp/apollo.net/tree/dotnet-core

接入也比较简单,在appsettings.json中配置Apollo服务地址。

{"Apollo": {"AppId": "ApolloDemo","Env": "DEV","MetaServer": "http://localhost:8080","ConfigServer": [ "http://localhost:8080" ]}
}

关于配置可以查看文档:https://github.com/ctripcorp/apollo.net/tree/dotnet-core/Apollo.Configuration

为什么地址端口是8080而不是8070?

因为在docker-compose.yml中我们暴露两个端口:8080个8070,8070是我们的Apollo配置中心管理界面,而8080端口是Spring Eureka服务注册中心。所以配置的应该是服务端的地址。

紧接着在Program.cs应用配置,代码如下:

using Com.Ctrip.Framework.Apollo;
using Com.Ctrip.Framework.Apollo.Logging;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;namespace ApolloDemo
{public class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext, builder) =>{LogManager.UseConsoleLogging(LogLevel.Trace);builder.AddApollo(builder.Build().GetSection("Apollo")).AddDefault();}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}
}

然后我们在Apollo管理界面新建一个与配置在appsettings.json中AppId同名的项目ApolloDemo

Apollo有一个核心的概念:Namespace

  • Namespace是配置项的集合,类似于一个配置文件的概念。

  • Namespace类型有三种:私有类型、公共类型、关联类型(继承类型)。

  • Namespace的获取权限分为两种:private (私有的)、public (公共的),这里的获取权限是相对于Apollo客户端来说的。

配置文件有多种格式,例如:properties、xml、yml、yaml、json等。同样Namespace也具有这些格式。在Portal UI中可以看到“application”的Namespace上有一个“properties”标签,表明“application”是properties格式的。

非properties格式的namespace,在客户端使用时需要调用ConfigService.getConfigFile(String namespace, ConfigFileFormat configFileFormat)来获取,如果使用Http接口直接调用时,对应的namespace参数需要传入namespace的名字加上后缀名,如datasources.json。apollo-client 1.3.0版本开始对yaml/yml做了更好的支持,使用起来和properties格式一致:Config config = ConfigService.getConfig("application.yml");,Spring的注入方式也和properties一致。

关于Namespace`的文档:https://github.com/ctripcorp/apollo/wiki/Apollo核心概念之“Namespace”

接下来去新增几个配置属性,然后发布。

现在去写一个接口,来实时读取Apollo中的配置。

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;namespace ApolloDemo.Controllers
{[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{[HttpGet][Route("Apollo")]public IActionResult ApolloTest([FromServices] IConfiguration configuration, string key){return Content(configuration.GetValue<string>(key));}}
}

使用起来也非常简单,这里根据传入的key值不同,获取到我们配置在Apollo中的value,并且是具有热更新,实时动态改变的。

然后修改name和age的值,在调用接口看看。注意在Apollo中修改后,需要发布才会生效。

简单介绍了 .NET Core 下使用Apollo配置中心,Apollo的功能远不止于此,根据需要可以去Github查看官网Wiki介绍,有详细的使用说明文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系

「面试专栏」前端面试之Webpack篇&#x1f9e9;序言&#x1f3a8;一、基础知识学习&#x1f3b2;二、常见面试题汇总&#x1f3af;三、构建和打包1、前端代码如何进行构建和打包&#xff1f;2、前端为何要进行打包和构建&#xff1f;3、webpack原理&#x1f3b0;四、模块相关1、…

进击吧!Blazor!第一期回顾

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

《五分钟商学院》个人篇学习总结(下)

【商业知识】| 作者 / Edison Zhou这是EdisonTalk的第286篇原创内容商业篇聚焦的是我们与外部的关系&#xff0c;管理篇聚焦的是我们与内部的关系&#xff0c;而个人篇聚焦的则是我们与自己的关系。与自己斗&#xff0c;其乐无穷&#xff0c;本文是个人篇的下半部分学习总结。上…

「软件项目管理」软件项目范围计划——需求管理与任务分解

软件项目范围计划——需求管理与任务分解序言一、软件需求定义及层次1、定义2、层次二、软件需求管理过程1、管理过程2、需求获取3、需求分析4、需求规格编写5、需求验证6、需求变更&#xff08;1&#xff09;需求变更管理的主要工作&#xff08;2&#xff09;需求变更控制流程…

leetcode106. 从中序与后序遍历序列构造二叉树

一:题目 二:思路 例子:中序[9,3,15,20,7];后序[9,15,7,20,3] 1.我们先选取后续的最后的结点3&#xff08;其是根节点&#xff09; 2.我们在中序序列中用上一步求出的根节点3并记录其在中序数组中的位置rootin,然后我们就可以 求出 左子树的结点个数&#xff08;rootin - leftin…

「offer来了」快来关注这些性能优化问题

「面试专栏」前端面试之性能优化篇&#x1f4ac;序言&#x1f4af;思维导图抢先看&#x1f441;️‍&#x1f5e8;️一、html、css、js、jq优化1、针对HTML&#xff0c;如何优化性能&#xff1f;2、针对CSS&#xff0c;如何优化性能&#xff1f;3、哪些方法能提升移动端CSS3动画…

不宜过分炒作第三代半导体材料弯道超车

目前&#xff0c;本土晶圆大厂与台积电在技术水平上的差距是非常明显的。就市场份额来说&#xff0c;台积电的市场份额超过50%&#xff0c;而本土晶圆大厂的市场份额大约是台积电的十分之一。在技术水平上&#xff0c;本土晶圆大厂也和台积电这样的大厂有一定差距。目前台积电7…

「offer来了」浅谈前端面试中开发环境常考知识点

「面试专栏」前端面试之开发环境篇&#x1f331;序言&#x1f332;一、git1、为什么要使用git?2、常用的git命令3、git提交规范&#x1f333; 二、Chrome调试工具&#x1f334;三、抓包1、抓包工具2、抓包过程&#x1f33e;四、linux 常用命令1、为什么要用linux&#xff1f;2…

数据结构与算法专题——第十题 输入法跳不过的坎-伸展树

我们知道AVL树为了保持严格的平衡&#xff0c;所以在数据插入上会呈现过多的旋转&#xff0c;影响了插入和删除的性能&#xff0c;此时AVL的一个变种伸展树&#xff08;Splay&#xff09;就应运而生了&#xff0c;我们知道万事万物都遵循一个“八二原则“&#xff0c;也就是说8…

「软件项目管理」一文详解软件项目成本计划

软件项目成本计划序言一、成本估算的定义二、估算的基本概念1、关于估算2、软件项目规模3、软件规模单位4、软件项目成本5、成本单位6、软件规模和软件成本的关系7、成本估算结果三、成本估算过程1、估算输入2、估算处理3、估算输出四、成本估算方法1、代码行估算法&#xff08…

在腾讯云云函数计算上部署.NET Core 3.1

云厂商&#xff08;腾讯云、Azure等&#xff09;提供了Serverless服务&#xff0c;借助于Serverless&#xff0c;开发人员可以更加专注于代码的开发&#xff0c;减少运维的成本。腾讯云的函数计算提供了很多运行库&#xff0c;对.NET的支持需要通过custom runtime 来支持&#…

MassTransit Get Started-

MassTransit&#xff1a;是一款.NET的分布式应用程序框架&#xff08;开源、免费&#xff09;。通过MassTransit&#xff0c;可以轻松创建利用基于消息的、松耦合异步通信的应用程序和服务&#xff0c;以提高可用性&#xff0c;可靠性和可伸缩性。MassTransit本身定位轻量级的服…

「软件项目管理」成本估算模型——Walston-Felix模型和COCOMO Ⅱ模型

Walston-Felix模型和COCOMO Ⅱ模型序言一、Walston-Felix模型1. 公式2. 举例二、COCOMO模型&#xff08;Constructive Cost Model&#xff09;1. 模型定义2. COCOMO模型的发展3. COCOMO基本原理三、COCOMO 811. 模型级别2. 项目类型3. 基本COCOMO-81&#xff08;1&#xff09;公…

图书管理(SSM)

一:前言 这仅仅是个小demo,体验了一把SSM配置地狱&#xff0c;就简单的实现CRUD 二:相关技术 MybatisSpringSpringMVCMysqlMavenTomcat 三:功能展示 1:查询 2:增加 3:删除 4&#xff1a;修改 四:上码 1&#xff1a;导入依赖 <?xml version"1.0" encoding&…

ASP.NET Core Cookie SameSite

在较多的项目中&#xff0c;Cookie 是比较常用的一种状态保持的选择。比如常见的例子&#xff1a;用户登录成功后&#xff0c;服务器通过 set-cookie 将会话Id设置到当前域下&#xff0c;前端在调用后端接口时&#xff0c;会自动将同域下的 Cookie 携带上&#xff0c;然后后端接…

还不会ts?一文带你打开ts的大门

一文带你打开ts的大门序言一、什么是TypeScript&#xff1f;1、编程语言的类型2、TypeScript究竟是什么&#xff1f;二、为什么要学习TypeScript&#xff1f;1、程序更容易理解2、效率更高3、更少的错误4、非常好的包容性5、一点小缺点三、typescript入门1、如何安装TypeScript…

idea中右侧的Maven框消失了

我掉 芭比Q了 idea中右侧的maven框居然没了 消失不见了 跟一束烟似的 没了 解决&#xff08;网上找的&#xff09;

「软件项目管理」一文详解软件项目进度计划

软件项目进度计划序言一、进度及任务的定义1. 进度2. 任务3. 产品和任务的关系二、任务关联关系1. 定义2. 任务(活动)之间的关系3. 任务关系矩阵4. 任务关联关系的依据三、进度管理图示1. 甘特图2. 网络图&#xff08;1&#xff09;定义&#xff08;2&#xff09;常用的网络图Ⅰ…

过年烟花特效

一&#xff1a;前言 过年了 菜鸡杰 在这给CSDN的伙计们拜年了 这一段时间以来 我特别感谢 我的粉丝 正是因为有你们的陪伴 所以我才会很大动力 去写博客&#xff0c;所以我就准备了一个特效给粉丝们 现在过年不让放烟花 我就改了个代码 改成烟花特效 送给大家 二:特效描述 这…

「软件项目管理」一文详解软件项目质量计划

一文详解软件项目质量计划&#x1f3a9;前言&#x1f452;一、质量概述1. 质量与软件质量2. 质量成本二、质量模型1. 定义2. 几种模型3. 模型解读&#xff08;1&#xff09;Bohem质量模型&#xff08;2&#xff09;McCall质量模型&#xff08;3&#xff09;ISO/IEC 9126质量模型…