背景
最近无意中看到了AgileConfig这个开源项目,觉得还挺有用的,之前做分布式的项目的配置要不在数据库中,要不就是在appsettings.json中。
配置在数据库中,一般是有两种方式读取,启动项目的时候初始化,或者在使用这个配置的时候查询一下,这样使用都有些局限性。
配置在appsettings.json中,改配置的时候在服务器上修改,如果有做负载均衡,那是相当麻烦。
于是当看到AgileConfig的时候就体验了一下,下载源码编译的话UI编译还挺麻烦的(可能和本人菜有关),最后是直接使用Docker直接部署的(项目介绍上的脚本是不能直接用的,需要自己修改下),在部署成功后基本按照项目介绍来就OK了。
AgileConfig的特点(github摘抄):
- 部署简单(UI编译折腾了好一会),最少只需要一个数据节点,支持docker部署
- 支持多节点分布式部署来保证高可用
- 配置支持按应用隔离,应用内配置支持分组隔离
- 支持多环境
- 应用支持继承,可以把公共配置提取到一个应用然后其它应用继承它
- 使用长连接技术,配置信息实时推送至客户端,热更新
- 支持IConfiguration,IOptions模式读取配置,原程序几乎可以不用改造
- 配置修改支持版本记录,随时回滚配置
- 如果所有节点都故障,客户端支持从本地缓存读取配置
使用例子
服务部署
直接上docker部署,可以多部署几个节点,数据库可以使用主流的数据库。
这里使用mysql是为了做高可用,单机的话直接使用sqllite。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
- 节点,部署成功后在浏览器中打开5601端口,进行服务初始化。然后就能看到当前的节点了,有部署其它的节点,一并添加进来,用于做高可用。
- 配置应用,应用对应我们的每个程序服务,比如分布式中用户登录做成一个服务,那么就需要单独在这里新建一个应用,其它模块也是如此。
- 配置项,在应用中点击配置项,对这个应用进行添加配置。
客户端使用
- 新建一个WebApi项目
- 在appsettings.json中添加agileconfig配置
1 2 3 4 5 6 7 8 9 10 11 12 |
|
- 在Program.cs配置agileconfig服务
1 2 3 4 |
|
- 新建一个Home控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
- 启动WebApi项目,并通过API调用获取刚才调用的配置
- 热更新,添加或修改一个配置项,发布后进行获取
- 高可用,停掉正在连接的节点,会自动连接到没有故障的节点
总结
通过统一的界面配置确实是非常省心省力,我们开发追求不就是简单易用,毕竟一件件小事加起来就不是一件小事了,像AgileConfig这样的框架就是非常友好的。