后面的文章都是介绍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<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
求星星!!!
发表回复