博客园Logo
首页
新闻
博问
专区
闪存
班级
代码改变世界
搜索
注册
登录
返回主页
菜鸟耕地
Agile.Zhou’s study corner
博客园
首页
新随笔
联系
订阅
管理
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();
});
通过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 logger,
IConfiguration configuration,
)
{
_logger = logger;
_IConfiguration = configuration;
}
///
/// 使用IConfiguration读取配置
///
///
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
求星星!!!
QQ群:1022985150 一起探讨学习.NET技术
作者:Agile.Zhou(kklldog)
出处:http://www.cnblogs.com/kklldog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
标签: AgileConfig, .NET Core
好文要顶 关注我 收藏该文
Agile.Zhou
关注 - 43
粉丝 - 241
+加关注
2 0
« 上一篇: 使用Github部署Azure应用服务
posted @ 2021-01-03 22:38 Agile.Zhou 阅读(63) 评论(4) 编辑 收藏
评论列表
#1楼 2021-01-03 22:46 SpringLeee
支持下
支持(0) 反对(0)
#2楼 [楼主] 2021-01-03 22:49 Agile.Zhou
@SpringLeee
感谢。
支持(0) 反对(0)
#3楼 2021-01-04 00:47 WeihanLi
感谢分享,提一点自己的想法,现在后台维护 websocket 链接和心跳的两个线程最好不要直接使用线程池线程,避免一直占用线程池线程影响线程池调度,指定一下 LongRunning 会单独使用一个线程而非线程池线程
支持(1) 反对(0)
#4楼 [楼主] 2021-01-04 01:11 Agile.Zhou
@WeihanLi
大佬牛逼,这都看出来了,我正好最近是要重构的
支持(0) 反对(0)
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】AWS携手博客园为开发者送福利,注册立享12个月免费套餐
【推荐】七牛云新老用户同享 1 分钱抢 CDN 1TB流量大礼包!
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻
相关博文:
· vertx-mysql-client/java/
· testblogsclient
· JS—client系列
· javahttpclienthttps
· ClientAPIObjectModel-ExecutionContext
» 更多推荐…
最新 IT 新闻:
· Google Chrome浏览器地址栏即将变得更安全、更快速
· 百度地图推出“疫情小区”搜索功能
· 我国量子存储器取得重大进展!世界首次实现“按需读取”
· 2021「蛋壳」要彻底碎了?CFO 等高管相继离职,上市不满一年深陷暴雷风波
· 依图CTO颜水成被曝离职,已加入东南亚电商独角兽Shopee
» 更多新闻…
公告
我的梦想是写一辈子代码!
加入QQ群 1022985150 一起讨论学习吧!
关注公众号一起学习进步吧!
昵称: Agile.Zhou
园龄: 12年5个月
粉丝: 241
关注: 43
+加关注
< 2021年1月 >
日 一 二 三 四 五 六
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
搜索
找找看
谷歌搜索
最新随笔
1.AgileConfig-如何使用AgileConfig.Client读取配置
2.使用Github部署Azure应用服务
3.AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承
4.Azure 静态 web 应用集成 Azure 函数 API
5…NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?
6.使用Azure静态Web应用部署Blazor Webassembly应用
7.使用 Azure静态web应用+Github全自动部署VUE站点
8.试用 Azure Sql 数据库
9.Azure内容审查器之羞羞图审查
10.Azure 内容审查器之文本审查
我的标签
.NET Core(31)
Azure(16)
silverlight(15)
wp7(13)
Blazor(10)
html5(7)
wpf(5)
.NET(5)
WCF(5)
mvvm light(5)
更多
积分与排名
积分 - 219995
排名 - 2920
随笔档案
2021年1月(1)
2020年12月(1)
2020年11月(4)
2020年10月(3)
2020年9月(4)
2020年8月(5)
2020年7月(4)
2020年6月(7)
2020年5月(4)
2020年4月(4)
2020年3月(4)
2020年2月(3)
2020年1月(1)
2019年8月(3)
2019年7月(1)
更多
我的开源
kklldog’s Github
blog.xbaby.xyz
最新评论