AgileConfig轻量级配置中心自第一个版本发布不知不觉已经半年了。在并未进行什么推广的情况下收到了250个star,对我有很大的鼓舞,并且也有不少同学试用,并且给出了宝贵的意见,非常感谢他们。其中有一些意见非常好,但是一直没有开发。主要是一来下半年比较忙(懒),二来我不想把AgileConfig搞的过于复杂。但其中有个需求被很多同学提及过,就是希望能支持应用间的继承(关联),类似Apollo的公共namespace的概念。比如微服务应用之间有不少公共配置项,可以配置在一个应用内,然后其他应用继承它,这样每个应用就不用重复的配置公共配置。我思考了一下,这个配置确实是个非常有用的功能,于是花了点时间实现了它。

Github地址:https://github.com/kklldog/AgileConfig 求star 。

下面的示例简单演示下如何使用AgileConfig读取配置并且使用继承功能

使用docker启动一个AgileConfig实例

sudo docker run --name agile_config -e adminConsole=true -e db:provider=sqlserver -e db:conn="Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =." -p 5000:5000 kklldog/agile_config:latest

使用docker命令运行一个AgileConfig实例,这是最简单的方法。当然你也可以拉源码下来编译发布使用IIS来运行它。

配置环境变量:

adminConsole=true 开启控制台功能

db:provider=sqlserver 数据库为SqlServer

db:conn="Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =." 配置数据库连接

-p 5000:5000 容器的5000口映射本地的5000口

配置AgileConfig

第一次运行需要配置管理密码



密码配置完成后重新登录进系统,开始配置节点



在设计的时候节点跟控制台是分开的,但是为了部署简单最后节点跟控制台被实现在一起了。所以采用单节点部署的时候,该实例既是节点又是控制台,所以也需要把本节点的地址加入到节点列表里,以便控制台能管理到。

添加应用

AgileConfig的初始化完成了,现在我们开始添加应用。

添加“公共应用”



添加应用名称,应用id,勾选“可被继承”。点击确定完成公共的创建。系统只支持一层的继承,可被继承的应用不能再继承其它应用。

创建完成后为公共应用添加配置项



为公共应用添加一个配置项:键为public_key_01 值为0001 。

添加“私有应用”



添加一个私有应用,不要选“可被继承”。点击继承应用栏的加号会弹出可以被的继承应用列表,选择“公共应用”。点击“确定”完成创建。

为私有应用创建配置项



为私有应用添加一个配置项:键为private_key_01 值为0002 。

注意:把所有的配置都上线,否则客户端读不到配置。

客户端读取配置

创建Asp.net Core WebApi项目

我们创建一个WebApi项目做为客户端来演示如何读取配置

使用nuget引用AgileConfig.Client

Install-Package AgileConfig.Client -Version 1.1.0

集成AgileConfig.Client

使用nuget安装成功后,切换到Program.cs开始集成AgileConfigClient。

 public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx,cfg)=> {
var appId = "private_01";
var secret = "1";
var nodes = "http://localhost:5000";
//new一个client实例
var configClient = new ConfigClient(appId, secret, nodes);
//使用AddAgileConfig配置一个新的IConfigurationSource
cfg.AddAgileConfig(configClient);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

使用IHostBuilder的ConfigureAppConfiguration把我们的ConfigClient注入进去。这里我们的ConfigClient配置的是私有应用的id:private_01 。

读取配置

前期工作都完成了,现在我们可以开始编写读取配置的代码了。

新建一个ReadConfigController:

   [ApiController]
[Route("[controller]")]
public class ReadConfigController : ControllerBase
{
private readonly IConfiguration _IConfiguration;
public ReadConfigController(IConfiguration configuration)
{
_IConfiguration = configuration;
} [HttpGet]
public String Get()
{
var publicConfig = _IConfiguration["public_key_01"];
var privateConfig = _IConfiguration["private_key_01"]; return $"publicConfig:{publicConfig} , privateConfig:{privateConfig}";
}
}

通过构造函数注入IConfiguration,然后通过它直接读取公共配置,私有配置,并且直接把字符串返回回去。

注意修改一下客户端程序的启动端口,默认5000跟上面的AgileConfig实例占用的端口冲突。

运行一下

运行客户端项目,然后在浏览器里输入http://localhost:51605/readconfig



可以看到我们的公共配置跟私有配置都准确的读取到了。

总结

通过以上一个简单的示例,演示了如何使用AgileConfig读取配置以及如何在应用间继承配置。以上示例并未展示所有内容,使用继承的时候需要注意一下几点:

  1. 当私有应用的配置跟被继承应用重复时,私有应用的配置会覆盖被继承应用的配置
  2. 如果一个应用被标记为"可被继承"后,这个应用自己不能继续继承其它应用
  3. 一个私有应用可以继承多个“可被继承”的应用,如果多个继承的应用间出现重复的配置,那么将按照继承的顺序,后面的应用会覆盖前面的应用。

如果喜欢这个项目的,请给我star吧。谢谢。

Github地址:https://github.com/kklldog/AgileConfig

关注我的公众号一起玩转技术

AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承的更多相关文章

  1. AgileConfig - 轻量级配置中心1.2.0发布,全新的UI✨✨✨

    AgileConfig自发布以来有个"大问题"-UI太丑.因为当初这个项目是给自己用的,连UI界面都没有,全靠手动在数据库里改配置.后来匆匆忙忙使用bootstrap3简单的码了一 ...

  2. AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

    AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...

  3. AgileConfig轻量级配置中心1.4.0发布,重构了发布功能

    加入 NCC 先说一个事,AgileConfig 在 7 月底终于通过了 NCC 社区的审核,正式成为了 NCC 大家庭的一员.这对 AgileConfig 来说是一个里程碑,希望加入 NCC 后能更 ...

  4. AgileConfig 轻量级配置中心 1.5 发布 - 支持多环境配置

    AgileConfig 从发布到现在,收到不同学的 issue 说需要多环境的支持.也就是一个应用在不同的环境下可以配置不同的配置项.这是一个非常有用的功能,就跟我们开发的时候会设置多个 appset ...

  5. AgileConfig 1.6.0 发布 - 支持服务注册与发现

    大家好,好久没有输出博文了,一是因为比较忙,另外一个原因是最近主要的精力是在给 AgileConfig 添加一个新的功能:服务注册与发现. 先说说为什么会添加这个功能.我自己的项目是用 Consul ...

  6. YoyoGo v1.7.2 发布, 支持 Nacos & Apollo 配置中心

    YoyoGo (Go语言框架)一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s /Apollo等 . https ...

  7. kubernetes实战-配置中心(四)分环境使用apollo配置中心

    要进行分环境,需要将现有实验环境进行拆分 portal服务,可以各个环境共用,但是apollo-adminservice和apollo-configservice必须要分开. 1.zk环境拆分为tes ...

  8. Visual Studio Code 1.0发布,支持中文在内9种语言

    Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...

  9. 携程Apollo(阿波罗)配置中心Spring Boot迁移日志组件,使用配置中心进行管理的思路

    说明: 1.Spring Boot项目默认使用logback进行日志管理 2.logback在启动时默认会自动检查是否有logback.xml文件,如果有时会有限加载这个文件. 3.那么如果是用配置中 ...

随机推荐

  1. css-2d,3d,过渡,动画

    css2d CSS3 转换可以对元素进行移动.缩放.转动.拉长或拉伸. 2D变换方法: translate()方法,根据左(X轴)和顶部(Y轴)位置给定的参数,从当前元素位置移动 transform: ...

  2. Python爬虫实战详解:爬取图片之家

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 如何使用python去实现一个爬虫? 模拟浏览器请求并获取网站数据在原始数据 ...

  3. CF957E Contact ATC

    二维偏序(逆序对) 因为风速vf,-w<=vf<=w,因此我们可以算出每一艘船到达原点的时间的取值范围 即取vf=w和vf=-w时,记ai为当vf=w时的用时,记bi为当vf=-w时的用时 ...

  4. leetcode99:n-queens

    题目描述 N皇后问题是把N个皇后放在一个N×N棋盘上,使皇后之间不会互相攻击. 给出一个整数n,返回n皇后问题的所有摆放方案 例如: 4皇后问题有两种摆放方案 [".Q..",  ...

  5. 纯CSS实现3D正方体动画效果

    前言 纯CSS实现3D正方体动画效果,此方法是通过transform的旋转(rotate)和位移(translate)实现的,具体效果是鼠标滑过时正方体的一个面会产生位移 效果图 ​

  6. tp3.2 前端截取字符串

    在Common目录中建立 function.php <?php function subtext($text, $length) { if(mb_strlen($text, 'utf8') &g ...

  7. c++实现扫雷游戏 初学

    设计思路 全局变量定义地图和一些判断信息 创建三个地图 分别表示 源地图  显示的效果地图  和一个用来判断点位是否被选中的地图 功能: 玩家输入要翻开的格子的行数和列数.用一个函数来翻开目标格子,如 ...

  8. IP/TCP/UDP checsum

    今天调试bug时, 忘了将原始的check_sum值reset,导致发包-抓包后发现.check-sum 错误. 来看一看check-sum:简单讲就是对要计算的数据,以16bit为单元进行累加,然后 ...

  9. socket套接字(字节序、地址转换)

    什么是socket: socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上 不同主机之间的进程通信.IPv4套接口地址结构 struc ...

  10. SSH2中的笔记

    1.web后端实质就是对表的添.删.查.改: 第一步:对系统进行分析,然后构思. 第二步:画出E-R图,设计出表或写出相应的实体类. 第三步:按照最简单的思想去设计的话,一个action-->一 ...