AgileConfig-如何使用AgileConfig.Client讀取配置
- 2021 年 1 月 3 日
- 筆記
- .NET Core, AgileConfig
前面的文章(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": "//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<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 = "//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 = "//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 |
根據組名獲取配置列表 |
| Task |
連接至伺服器 |
| bool Load() | 手工從伺服器拉取一次配置到客戶端 |
| void LoadConfigs(List |
手工把配置項載入到客戶端 |
| event Action |
這是一個事件,當某個配置值發生變化的時候觸發 |
gihub地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
求星星!!!


