首先祝大家新年快樂,身體健康!
前面的文章(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<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
|
根據組名獲取配置列表 |
Task
|
連接至服務器 |
bool Load() | 手工從服務器拉取一次配置到客戶端 |
void LoadConfigs(List
|
手工把配置項加載到客戶端 |
event Action
|
這是一個事件,當某個配置值發生變化的時候觸發 |
gihub地址:
AgileConfig
AgileConfig.Client
AgileConfig MVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample
求星星!!!