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”,里面配置了:

  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 GetGroup(string groupName) 根據組名獲取配置列表
Task ConnectAsync() 連接至服務器
bool Load() 手工從服務器拉取一次配置到客戶端
void LoadConfigs(List configs) 手工把配置項加載到客戶端
event Action ConfigChanged 這是一個事件,當某個配置值發生變化的時候觸發

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM