2021-01-04

博客园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
最新评论

  1. Re:AgileConfig-如何使用AgileConfig.Client读取配置
    @WeihanLi 大佬牛逼,这都看出来了,我正好最近是要重构的…
    –Agile.Zhou
  2. Re:AgileConfig-如何使用AgileConfig.Client读取配置
    感谢分享,提一点自己的想法,现在后台维护 websocket 链接和心跳的两个线程最好不要直接使用线程池线程,避免一直占用线程池线程影响线程池调度,指定一下 LongRunning 会单独使用一个线程…
    –WeihanLi
  3. Re:AgileConfig-如何使用AgileConfig.Client读取配置
    @SpringLeee 感谢。…
    –Agile.Zhou
  4. Re:AgileConfig-如何使用AgileConfig.Client读取配置
    支持下
    –SpringLeee
  5. Re:造轮子-AgileConfig基于.NetCore的一个轻量级配置中心
    关注了
    –jessqiu
    阅读排行榜
  6. 在Mac上使用Visual Studio Code开发/调试.NET Core代码(18354)
  7. 使用Docker运行SQL Server(12939)
  8. .NET开源高性能Socket通信中间件Helios介绍及演示(11891)
  9. 使用签名来保证ASP.NET MVC OR WEBAPI的接口安全(11872)
  10. 微信小程序列表项滑动显示删除按钮(8804)
    评论排行榜
  11. 我们真的需要JWT吗?(93)
  12. 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心(79)
  13. .NET开源高性能Socket通信中间件Helios介绍及演示(75)
  14. 使用签名来保证ASP.NET MVC OR WEBAPI的接口安全(69)
  15. ASP.NET Core Blazor Webassembly 之 数据绑定(49)
    推荐排行榜
  16. .NET开源高性能Socket通信中间件Helios介绍及演示(58)
  17. 造轮子-AgileConfig基于.NetCore的一个轻量级配置中心(51)
  18. 我们真的需要JWT吗?(25)
  19. 使用签名来保证ASP.NET MVC OR WEBAPI的接口安全(25)
  20. AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承(24)
    Copyright © 2021 Agile.Zhou
    Powered by .NET 5.0 on Kubernetes

你可能感兴趣的:(2021-01-04)