关于c#:AgileConfig如何使用AgileConfigClient读取配置

29次阅读

共计 3703 个字符,预计需要花费 10 分钟才能阅读完成。

后面的文章都是介绍 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”,外面配置了:

  1. appId 利用 id
  2. secret 利用密钥,没有的话留空
  3. 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<ConfigItem> GetGroup(string groupName) | 依据组名获取配置列表 |
| Task<bool> ConnectAsync() | 连贯至服务器 |
| bool Load() | 手工从服务器拉取一次配置到客户端 |
| void LoadConfigs(List<ConfigItem> configs) | 手工把配置项加载到客户端 |
| event Action<ConfigChangedArg> ConfigChanged | 这是一个事件,当某个配置值发生变化的时候触发 |

gihub 地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
求星星!!!

正文完
 0