当前位置: 首页 > 工具软件 > AgileConfig > 使用案例 >

AgileConfig-如何使用AgileConfig.Client读取配置

阴波峻
2023-12-01

前面的文章都是介绍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

 
  1. Install-Package AgileConfig.Client

当然第一步是使用nuget命令安装最新版的Client库。

修改appsettings.json

 
  1. "AgileConfig": {
  2. "appId": "test_app",
  3. "secret": "",
  4. "nodes": "http://agileconfig.xbaby.xyz:5000"
  5. }

AgileConfig.Client连接服务端需要一点必要的信息,我们把这些信息配置在appsettings.json文件里。节点的名称叫“AgileConfig”,里面配置了:

  1. appId 应用id
  2. secret 应用密钥,没有的话留空
  3. nodes 节点地址,如果有多个则使用英文逗号(,)分隔

AddAgileConfig

修改program.cs文件:

 
  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureAppConfiguration((context, config) =>
  4. {
  5. //注入AgileConfig Configuration Provider
  6. config.AddAgileConfig();
  7. })
  8. .ConfigureWebHostDefaults(webBuilder =>
  9. {
  10. webBuilder.UseStartup<Startup>();
  11. });

通过AddAgileConfig扩展方法注入AgileConfigProvider。AgileConfigProvider才是跟配置系统打交道的组件。如果你想要使用Client的实例进行读取配置,也可以手动实例化一个client然后通过AddAglieConfig的另外一个重载注入进去。

 
  1. Host.CreateDefaultBuilder(args)
  2. .ConfigureAppConfiguration((context, config) =>
  3. {
  4. //注入AgileConfig Configuration Provider
  5. var client = new ConfigClient();
  6. config.AddAgileConfig(client);
  7. })

读取配置

通过以上的设置,其实后面的配置读取跟使用appsettings.json没什么区别了。

 
  1. public HomeController(
  2. ILogger<HomeController> logger,
  3. IConfiguration configuration,
  4. )
  5. {
  6. _logger = logger;
  7. _IConfiguration = configuration;
  8. }
  9.  
  10. /// <summary>
  11. /// 使用IConfiguration读取配置
  12. /// </summary>
  13. /// <returns></returns>
  14. public IActionResult ByIConfiguration()
  15. {
  16. var userId = _IConfiguration["userId"];
  17. var dbConn = _IConfiguration["db:connection"];
  18.  
  19. ViewBag.userId = userId;
  20. ViewBag.dbConn = dbConn;
  21.  
  22. return View("Configuration");
  23. }

控制台下读取配置

当然了从本质上来说控制台项目跟mvc项目没啥区别。同样可以引入ConfigurationBuilder来注入ConfigClient。但是一般我们使用控制台可能是写个小工具,不用搞的这么复杂,直接new一个ConfigClient的实例是最直接的方法。

 
  1. static void Main(string[] args)
  2. {
  3. Console.WriteLine("Hello World!");
  4.  
  5. var appId = "test_app";
  6. var secret = "";
  7. var nodes = "http://agileconfig.xbaby.xyz:5000";
  8. //使用有参构造函数,手动传入appid等信息
  9. var client = new ConfigClient(appId, secret, nodes);
  10.  
  11. Task.Run(async () =>
  12. {
  13. while (true)
  14. {
  15. await Task.Delay(5000);
  16. foreach (string key in client.Data.Keys)
  17. {
  18. var val = client[key];
  19. Console.WriteLine("{0} : {1}", key, val);
  20. }
  21. }
  22. });
  23.  
  24. client.ConnectAsync();//如果不是mvc项目,不使用AddAgileConfig方法的话,需要手动调用ConnectAsync方法来跟服务器建立连接
  25.  
  26. Console.WriteLine("Test started .");
  27. Console.Read();

需要注意的一个地方是手工new ConfigClient是需要自己调用ConnectAsync方法进行连接服务器的。

WPF程序读取配置

跟控制台程序一样,WPF同样首选直接new一个ConfigClient实例比较简单易用。

 
  1. public partial class App : Application
  2. {
  3. public static IConfigClient ConfigClient { get; private set; }
  4. private void Application_Startup(object sender, StartupEventArgs e)
  5. {
  6. //跟控制台项目一样,appid等信息取决于你如何获取。你可以写死,可以从配置文件读取,可以从别的web service读取。
  7. var appId = "test_app";
  8. var secret = "";
  9. var nodes = "http://agileconfig.xbaby.xyz:5000";
  10. ConfigClient = new ConfigClient(appId, secret, nodes);
  11.  
  12. ConfigClient.ConnectAsync().GetAwaiter();
  13. }
  14. }

实例化的位置可以选在App文件的Application_Startup方法内。并且把实例直接挂到App类的静态变量上。

注意:Application_Startup方法是同步方法。调用ConnectAsync之后需要调用GetAwaiter()方法等待连接成功。

在窗体程序内使用配置

 
  1. private void Window_Loaded(object sender, RoutedEventArgs e)
  2. {
  3. this.tbx1.Text = App.ConfigClient["userId"];
  4. this.tbx2.Text = App.ConfigClient["connection"];
  5. }

我们通过直接访问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
求星星!!!

 类似资料: