AgileConfig分布式统一配置

背景

最近无意中看到了AgileConfig这个开源项目,觉得还挺有用的,之前做分布式的项目的配置要不在数据库中,要不就是在appsettings.json中。

配置在数据库中,一般是有两种方式读取,启动项目的时候初始化,或者在使用这个配置的时候查询一下,这样使用都有些局限性。

配置在appsettings.json中,改配置的时候在服务器上修改,如果有做负载均衡,那是相当麻烦。

于是当看到AgileConfig的时候就体验了一下,下载源码编译的话UI编译还挺麻烦的(可能和本人菜有关),最后是直接使用Docker直接部署的(项目介绍上的脚本是不能直接用的,需要自己修改下),在部署成功后基本按照项目介绍来就OK了。

 AgileConfig的特点(github摘抄):

  1. 部署简单(UI编译折腾了好一会),最少只需要一个数据节点,支持docker部署
  2. 支持多节点分布式部署来保证高可用
  3. 配置支持按应用隔离,应用内配置支持分组隔离
  4. 支持多环境
  5. 应用支持继承,可以把公共配置提取到一个应用然后其它应用继承它
  6. 使用长连接技术,配置信息实时推送至客户端,热更新
  7. 支持IConfiguration,IOptions模式读取配置,原程序几乎可以不用改造
  8. 配置修改支持版本记录,随时回滚配置
  9. 如果所有节点都故障,客户端支持从本地缓存读取配置

使用例子

服务部署

直接上docker部署,可以多部署几个节点,数据库可以使用主流的数据库。

这里使用mysql是为了做高可用,单机的话直接使用sqllite。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

sudo docker run \

--name agile_config_1 \

-e TZ=Asia/Shanghai \

-e adminConsole=true \

-e db__provider=mysql \

-e db__conn="Data Source=172.0.0.1;Port=3306;User ID=root;Password=123456;Initial Catalog=testdb;Charset=utf8;SslMode=none;Max pool size=10;" \

-p 5601:5000 \

-d kklldog/agile_config:latest

sudo docker run \

--name agile_config_2 \

-e TZ=Asia/Shanghai \

-e adminConsole=true \

-e db__provider=mysql \

-e db__conn="Data Source=172.0.0.1;Port=3306;User ID=root;Password=123456;Initial Catalog=testdb;Charset=utf8;SslMode=none;Max pool size=10;" \

-p 5602:5000 \

-d kklldog/agile_config:latest

  

  • 节点,部署成功后在浏览器中打开5601端口,进行服务初始化。然后就能看到当前的节点了,有部署其它的节点,一并添加进来,用于做高可用。

  •  配置应用,应用对应我们的每个程序服务,比如分布式中用户登录做成一个服务,那么就需要单独在这里新建一个应用,其它模块也是如此。

  

  • 配置项,在应用中点击配置项,对这个应用进行添加配置。

客户端使用

  • 新建一个WebApi项目
  • 在appsettings.json中添加agileconfig配置

1

2

3

4

5

6

7

8

9

10

11

12

"AgileConfig": {

  "appId""TrendsConfigDemo_1",

  "secret""abcdefg1..",

  "nodes""http://172.0.0.1:5601,http://172.0.0.1:5602"//多个节点使用逗号分隔,会随机连接一个节点

  "name""TrendsConfigDemo",

  "tag""tag1",

  "env""DEV",

  "httpTimeout""100",

  "cache": {

    "directory""agile/config"

  }

}

  • 在Program.cs配置agileconfig服务

1

2

3

4

builder.Host.UseAgileConfig(new ConfigClient

{

Tag = "1" // 用于标记当前的服务

});

  

  • 新建一个Home控制器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[Route("api/[controller]")]

[ApiController]

public class HomeController : ControllerBase

{

    private readonly IConfiguration _IConfiguration;

    public HomeController(IConfiguration configuration)

    {

        _IConfiguration = configuration;

    }

    [HttpGet]

    public string GetConfig(string configName)

    {

        return $"{this._IConfiguration[configName]}";

    }

}

  • 启动WebApi项目,并通过API调用获取刚才调用的配置

  • 热更新,添加或修改一个配置项,发布后进行获取
  • 高可用,停掉正在连接的节点,会自动连接到没有故障的节点 

总结

通过统一的界面配置确实是非常省心省力,我们开发追求不就是简单易用,毕竟一件件小事加起来就不是一件小事了,像AgileConfig这样的框架就是非常友好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值