AgileConfig-如何使用AgileConfig.Client读取配置
前面的文章(AgileConfig基于.NetCore的一个轻量级配置中心,AgileConfig轻量级配置中心 1.1.0 发布,支持应用间配置继承)都是介绍AgileConfig服务端已经控制台是如何工作、如何使用的,其实AgileConfig还有一个重要的组成部分:AgileConfig.Client。
AgileConfig.Client是使用C#编写的一个类库,只有使用它才能跟AgileConfig的服务端更好的配合工作实现实时推送配置信息等功能。
最近有几个同学问我如何集成Client,如何使用Client,看来光是Readme上的示例还是不够的,有必要比较详细的介绍下如何使用AgileConfig.Client。
下面通过几个示例来演示下如何AgileConfig.Client如何在mvc,控制台,wpf等程序上来读取配置:
asp.net core mvc下读取配置
mvc项目应该是目前使用最广泛的项目,同样它与AgileConfig.Client的集成最深入。下面来看看如何在mvc项目下使用AgileConfig.Client。
安装AgileConfig.Client
Install-Package AgileConfig.Client
当然第一步是使用nuget命令安装最新版的Client库。
修改appsettings.json
"AgileConfig": {
"appId": "test_app",
"secret": "",
"nodes": "http://agileconfig.xbaby.xyz:5000"
}
AgileConfig.Client连接服务端需要一点必要的信息,我们把这些信息配置在appsettings.json文件里。节点的名称叫“AgileConfig”,里面配置了:
- appId 应用id
- secret 应用密钥,没有的话留空
- nodes 节点地址,如果有多个则使用英文逗号(,)分隔
AddAgileConfig
修改program.cs文件:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
//注入AgileConfig Configuration Provider
config.AddAgileConfig();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
通过AddAgileConfig扩展方法注入AgileConfigProvider。AgileConfigProvider才是跟配置系统打交道的组件。如果你想要使用Client的实例进行读取配置,也可以手动实例化一个client然后通过AddAglieConfig的另外一个重载注入进去。
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
//注入AgileConfig Configuration Provider
var client = new ConfigClient();
config.AddAgileConfig(client);
})
读取配置
通过以上的设置,其实后面的配置读取跟使用appsettings.json没什么区别了。
public HomeController(
ILogger<HomeController> logger,
IConfiguration configuration,
)
{
_logger = logger;
_IConfiguration = configuration;
}
/// <summary>
/// 使用IConfiguration读取配置
/// </summary>
/// <returns></returns>
public IActionResult ByIConfiguration()
{
var userId = _IConfiguration["userId"];
var dbConn = _IConfiguration["db:connection"];
ViewBag.userId = userId;
ViewBag.dbConn = dbConn;
return View("Configuration");
}
控制台下读取配置
当然了从本质上来说控制台项目跟mvc项目没啥区别。同样可以引入ConfigurationBuilder来注入ConfigClient。但是一般我们使用控制台可能是写个小工具,不用搞的这么复杂,直接new一个ConfigClient的实例是最直接的方法。
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var appId = "test_app";
var secret = "";
var nodes = "http://agileconfig.xbaby.xyz:5000";
//使用有参构造函数,手动传入appid等信息
var client = new ConfigClient(appId, secret, nodes);
Task.Run(async () =>
{
while (true)
{
await Task.Delay(5000);
foreach (string key in client.Data.Keys)
{
var val = client[key];
Console.WriteLine("{0} : {1}", key, val);
}
}
});
client.ConnectAsync();//如果不是mvc项目,不使用AddAgileConfig方法的话,需要手动调用ConnectAsync方法来跟服务器建立连接
Console.WriteLine("Test started .");
Console.Read();
需要注意的一个地方是手工new ConfigClient是需要自己调用ConnectAsync方法进行连接服务器的。
WPF程序读取配置
跟控制台程序一样,WPF同样首选直接new一个ConfigClient实例比较简单易用。
public partial class App : Application
{
public static IConfigClient ConfigClient { get; private set; }
private void Application_Startup(object sender, StartupEventArgs e)
{
//跟控制台项目一样,appid等信息取决于你如何获取。你可以写死,可以从配置文件读取,可以从别的web service读取。
var appId = "test_app";
var secret = "";
var nodes = "http://agileconfig.xbaby.xyz:5000";
ConfigClient = new ConfigClient(appId, secret, nodes);
ConfigClient.ConnectAsync().GetAwaiter();
}
}
实例化的位置可以选在App文件的Application_Startup方法内。并且把实例直接挂到App类的静态变量上。
注意:Application_Startup方法是同步方法。调用ConnectAsync之后需要调用GetAwaiter()方法等待连接成功。
在窗体程序内使用配置
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.tbx1.Text = App.ConfigClient["userId"];
this.tbx2.Text = App.ConfigClient["connection"];
}
我们通过直接访问App类上的ConfigClient对象读取配置信息。
AgileConfig.Client公共方法
下面列举下Client常用的几个公共方法
| 名称 | 说明 |
|---|---|
| string this[string key] | 直接通过键索引值 |
| string Get(string key) | 根据键获取值 |
| List GetGroup(string groupName) | 根据组名获取配置列表 |
| Task ConnectAsync() | 连接至服务器 |
| bool Load() | 手工从服务器拉取一次配置到客户端 |
| void LoadConfigs(List configs) | 手工把配置项加载到客户端 |
| event Action ConfigChanged | 这是一个事件,当某个配置值发生变化的时候触发 |
gihub地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
求星星!!!
AgileConfig-如何使用AgileConfig.Client读取配置的更多相关文章
- 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心
微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移.玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等 ...
- YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关
YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...
- 无法读取配置节“oracle.manageddataaccess.client”,因为它缺少节声明
程序发布后出现问题: 无法读取配置节“oracle.manageddataaccess.client”,因为它缺少节声明 解决办法: 1.安装了odac12. ODTwithODAC121010.z ...
- Spark读取配置(转)
转自:https://github.com/keepsimplefocus/spark-sourcecodes-analysis/blob/master/markdowns/Spark%E8%AF%B ...
- .Net Core 自定义配置源从配置中心读取配置
配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...
- CAT客户端如何从Apollo中读取配置?
运行环境 以下就是这个示例的运行环境,如果版本号不一样,区别也应该不会很大,可以根据实际情况做相应调整. JDK 8 spring boot 2.0.7.RELEASE cat-client 3.0. ...
- Spring Cloud配置中心客户端读取配置
微服务连接配置中心来实现外部配置的读取. 引入依赖 <dependencies> <dependency> <groupId>org.springframework ...
- .NET Core采用的全新配置系统[1]: 读取配置数据
提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...
- ASP.NET Core的配置(1):读取配置信息
提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...
随机推荐
- 转:为什么说Python是最值得学习的编程语言
老猿作为一个老程序员,研究生毕业后就没有这么用心的学过一门新的语言,而今年4月开始学Python以来,疯狂的迷上了它,有时很想写一篇为什么要学Python的文章,可一直懒没动笔,今天看到博友" ...
- Day6【Scrum 冲刺博客】
每日会议总结 昨天已完成的工作 方晓莹(PIPIYing) 对接住户相关接口 处理token过期重定向.页面跳转.错误状态处理等内容 方子茵(Laa-L) 暂无 黄芯悦(Sheaxx) 完善物业报修页 ...
- 团队作业6(B)-事后诸葛亮分析
白给团队e-shop项目Postmortem结果 (整理:政B) 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚? 答:主要是为商户和消费者提供一个网上交易商品的平台,定义明确. 2.我们 ...
- Scrum 冲刺第六天
一.每日站立式会议 1.会议内容 1)进行每日工作汇报 张博愉: 昨天已完成的工作:学习如何编写用户手册 今日工作计划:编写测试计划 工作中遇到的困难:文档不知如何动手 张润柏: 昨天已完成的工作:完 ...
- PCANBasic开发(二)
使用Peak的PCan转换器开发,使用其中的PCanBasic.dll // PCANBasic.cs // // ~~~~~~~~~~~~ // // PCAN-Basic API // // ~~ ...
- 基于jaccard相似度的LSH
使用Python通过LSH建立推荐引擎 LSH:一个可以用来处理成百上千行的算法 前提: Python 基础 Pandas 学完本教程之后,解锁成就: 通过建立shingles 为LSH准备训练集和测 ...
- CF1373F Network Coverage
题目链接 对于每一个 \(i\) 可以看作一个管道.赋予三个信息: \(\text{minIn}_i\) 表示至少要从上一家 \(i - 1\) 得到连接数,才能正常供给 \(i\) 城市 \(\te ...
- 【APIO2018】选圆圈(平面分块 | CDQ分治 | KDT)
Description 给定平面上的 \(n\) 个圆,用三个参数 \((x, y, R)\) 表示圆心坐标和半径. 每次选取最大的一个尚未被删除的圆删除,并同时删除所有与其相切或相交的圆. 最后输出 ...
- 题解-[HNOI2016]序列
题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 ...
- 购物车 python作业
功能要求:要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功.附加:可充值.某商品移除购物车goods = ...