AgileConfig-如何使用AgileConfig.Client读取配置

  行业资讯     |      2021/03/31

前面的文章都是介绍AgileConfig服务端已经控制台是如何工作、如何使用的,其实AgileConfig还有一个重要的组成部分:AgileConfig.Client。 


AgileConfig.Client是使用C#编写的一个类库,只有使用它才能跟AgileConfig的服务端配合工作实现实时推送配置信息等功能。 


最近有几个同学问我如何集成Client,如何使用Client,看来光是Readme上的示例还是不够的,有必要比较详细的介绍下如何使用AgileConfig.Client。 


下面通过几个示例来演示下如何AgileConfig.Client如何在mvc,控制台,wpf等程序上来读取配置: 


AgileConfig-如何使用AgileConfig.Client读取配置

asp.net core mvc下读取配置 


mvc项目应该是目前使用最广泛的项目,同样它与AgileConfig.Client的集成最深入。下面来看看如何在mvc项目下使用AgileConfig.Client。


安装AgileConfig.Client 

1. Install - Package AgileConfig . Client


当然第一步是使用nuget命令安装最新版的Client库。


修改appsettings.json 

1. "AgileConfig" : {

2. "appId" : "test_app" ,

3. "secret" : "" ,

4. "nodes" : "http://agileconfig.xbaby.xyz:5000"

5. }


AgileConfig.Client连接服务端需要一点必要的信息,我们把这些信息配置在appsettings.json文件里。节点的名称叫“AgileConfig”,里面配置了:

1. appId 应用id

2. secret 应用密钥,没有的话留空

3. nodes 节点地址,如果有多个则使用英文逗号(,)分隔

AddAgileConfig 

修改program.cs文件:

1. public static IHostBuilder CreateHostBuilder ( string [] args ) =>

2. Host . CreateDefaultBuilder ( args )

3. . ConfigureAppConfiguration (( context , config ) =>

4. {

5. //注入AgileConfig Configuration Provider

6. config . AddAgileConfig ;

7. })

8. . ConfigureWebHostDefaults ( webBuilder =>

9. {

10. webBuilder . UseStartup < Startup >;

11. });


通过AddAgileConfig扩展方法注入AgileConfigProvider。AgileConfigProvider才是跟配置系统打交道的组件。如果你想要使用Client的实例进行读取配置,也可以手动实例化一个client然后通过AddAglieConfig的另外一个重载注入进去。

1. Host . CreateDefaultBuilder ( args )

2. . ConfigureAppConfiguration (( context , config ) =>

3. {

4. //注入AgileConfig Configuration Provider

5. var client = new ConfigClient ;

6. config . AddAgileConfig ( client );

7. })

读取配置 

通过以上的设置,其实后面的配置读取跟使用appsettings.json没什么区别了。

1. public HomeController (

2. ILogger < HomeController > logger ,

3. IConfiguration configuration ,

4. )

5. {

6. _logger = logger ;

7. _IConfiguration = configuration ;

8. }

9. 

10. ///

11. /// 使用IConfiguration读取配置

12. ///

13. ///

14. public IActionResult ByIConfiguration

15. {

16. var userId = _IConfiguration [ "userId" ];

17. var dbConn = _IConfiguration [ "db:connection" ];

18. 

19. ViewBag . userId = userId ;

20. ViewBag . dbConn = dbConn ;

21. 

22. return View ( "Configuration" );

23. }

控制台下读取配置 

当然了从本质上来说控制台项目跟mvc项目没啥区别。同样可以引入ConfigurationBuilder来注入ConfigClient。但是一般我们使用控制台可能是写个小工具,不用搞的这么复杂,直接new一个ConfigClient的实例是最直接的方法。

1. static void Main ( string [] args )

2. {

3. Console . WriteLine ( "Hello World!" );

4. 

5. var appId = "test_app" ;

6. var secret = "" ;

7. var nodes = "http://agileconfig.xbaby.xyz:5000" ;

8. //使用有参构造函数,手动传入appid等信息

9. var client = new ConfigClient ( appId , secret , nodes );

10. 

11. Task . Run ( async =>

12. {

13. while ( true )

14. {

15. await Task . Delay ( 5000 );

16. foreach ( string key in client . Data . Keys )

17. {

18. var val = client [ key ];

19. Console . WriteLine ( "{0} : {1}" , key , val );

20. }

21. }

22. });

23. 

24. client . ConnectAsync ; //如果不是mvc项目,不使用AddAgileConfig方法的话,需要手动调用ConnectAsync方法来跟服务器建立连接

25. 

26. Console . WriteLine ( "Test started ." );

27. Console . Read ;



需要注意的一个地方是手工new ConfigClient是需要自己调用ConnectAsync方法进行连接服务器的。

WPF程序读取配置 

跟控制台程序一样,WPF同样首选直接new一个ConfigClient实例比较简单易用。

1. public partial class App : Application

2. {

3. public static IConfigClient ConfigClient { get ; private set ; }

4. private void Application_Startup ( object sender , StartupEventArgs e )

5. {

6. //跟控制台项目一样,appid等信息取决于你如何获取。你可以写死,可以从配置文件读取,可以从别的web service读取。

7. var appId = "test_app" ;

8. var secret = "" ;

9. var nodes = "http://agileconfig.xbaby.xyz:5000" ;

10. ConfigClient = new ConfigClient ( appId , secret , nodes );

11. 

12. ConfigClient . ConnectAsync . GetAwaiter ;

13. }

14. }

实例化的位置可以选在App文件的Application_Startup方法内。并且把实例直接挂到App类的静态变量上。



注意:Application_Startup方法是同步方法。调用ConnectAsync之后需要调用GetAwaiter方法等待连接成功。

在窗体程序内使用配置 1. private void Window_Loaded ( object sender , RoutedEventArgs e )

2. {

3. this . tbx1 . Text = App . ConfigClient [ "userId" ];

4. this . tbx2 . Text = App . ConfigClient [ "connection" ];

5. }


我们通过直接访问App类上的ConfigClient对象读取配置信息。


AgileConfig.Client公共方法 


下面列举下Client常用的几个公共方法

QQ截图20210331102446.jpg


gihub地址: 


AgileConfig 


AgileConfig.Client 


AgileConfig MVCSample 


AgileConfig WPFSample 


AgileConfig ConsoleSample 

图文来源网络

tag: