.net core(微服务学习)-使用 AgileConfig轻量配置中心

发布时间 2023-09-13 16:28:09作者: Bluegoing

由于之前项目维护的时候有多个API服务,发布时候又做了高可用多主机均衡负载,环境又有多套,当部署新代码的时候如果有新增配置项需要修改N个环境和服务器实属折磨人

 

 

 

 

我们知道每个.net core中都有一个appsettings.json的配置文件,由于之前项目有3个环境,一共有4台主机,每个主机下面又有4个服务,

如果修改内容多的时候,所有服务都要更新并修改配置文件,一共要改16(4台主机每台4个服务)个配置文件,维护起来太难受了

所想着改造一波,因为目前微服务中也提及了很多注册中心和配置中心(Apollo 或者Nacos) 但是官方都没有明面表示支持Postgres,因为公司项目使用的Postgres

这里最后采用了AgileConfig轻量配置中心 如果使用配置中心后架构就如下所示了

到时候不管重新部署还是更新配置项目就很简单

 

我们只需要将DEV环境的配置项目修改将新增配置项同步到其他环境即可

 

 

 

 

这里我们将常用数据库连接,redis连接等新建了一个Common类,其他四个服务的配置项目关联common类,那么第一次部署后,同步common配置,将内容修改为当前环境的内容后就不会去同步和修改common类了

 然后每次有新增就去同步每个服务私有的配置项内容

 

引入配置中心,就只需要再代码中添加如下代码

 

1.修改appsetting.json

  "AgileConfig": {
    "appId": "xsw_webapi",
    "secret": "webapi",
    "nodes": "http://114.117.168.70:5000", //配置中心的地址
    "name": "xsw_webapi",
    "tag": "webapi",
    "env": "DEV",
    "serviceRegister": { //服务注册信息,如果不配置该节点,则不会启动任何跟服务注册相关的服务 可选
      "serviceId": "test_webpapi", //服务id,全局唯一,用来唯一标示某个服务
      "serviceName": "test_webpapi_01", //服务名,可以重复,某个服务多实例部署的时候这个serviceName就可以重复
      "ip": "127.0.0.1", //服务的ip
      "port": 8004, //服务的端口
      "metaData": [ //携带服务的其他元数据 可选
        "2023-09-08"
      ]
    }
  }

然后再Programe配置项内添加

 

.ConfigureAppConfiguration((hostingContext, config) =>//指定应用的配置提供程序
{

    var configClient = new ConfigClient();
    //使用AddAgileConfig配置一个新的IConfigurationSource
    config.AddAgileConfig(configClient);
})

 

因为项目里使用了服务发现所所以

 

 在Startup中也添加了发现和注册

  services.AddAgileConfig();

 

最后运行API就能依托配置中心来管理配置文件了,其他API的服务修改方式和此一样,只是需要将appsettings.json中的appid和appsecret换成对应的内容