跳到主要内容
版本:3.0

配置

大多数项目在配置这块,先把边界分清就够了:

  • 配置平时放哪
  • 什么情况下本地配置就够了
  • 什么时候再接配置中心

先把边界分清

在 Aegis 里,常见的配置分成两层:

层级解决什么问题对应组件
本地配置应用怎么读配置Aegis.Configuration
配置中心配置还能从哪里来Aegis.Configuration.ConfigCenter

先按这个理解就够:

  • Aegis.Configuration 管“怎么读”
  • ConfigCenter 管“从哪读”

大多数项目起步只用本地配置

如果你只是做一个普通业务项目,或者先想把第一版跑通,本地配置通常就够了。

常见做法就是:

  • 主配置写在 appsettings.json
  • 需要拆分时配 LoadConfigurations
  • 代码里统一用 ConfigManager

例如:

{
"LoadConfigurations": [
"Configs/"
],
"SqlConnection": "Host=127.0.0.1;Database=aegis_db;Port=5432;Username=postgres;Password=pass"
}

代码里这样读:

var sqlConnection = ConfigManager.Get("SqlConnection");
var redisOptions = ConfigManager.Get<RedisOptions>("Redis");
var databases = ConfigManager.GetArray<DatabaseConfig>("Databases");

什么时候再接配置中心

一般到了下面这些场景,再考虑配置中心:

  • 环境多了,配置差异越来越大
  • 有些配置想集中管理
  • 多个服务要复用同一份配置

这时再接 Aegis.Configuration.ConfigCenter 会比较合适。

appsettings.json 里通常放什么

对一个普通业务项目来说,下面这些最常见:

  • 数据库连接
  • Redis 配置
  • Swagger 配置
  • 日志级别
  • 业务配置入口

Component.deps.jsonappsettings.json 别写混了

这个地方很容易写混:

  • appsettings.json 放运行配置
  • Component.deps.json 放组件装配

例如:

  • 数据库连接串放 appsettings.json
  • Logging / Swagger / BusinessServices 这些组件开关放 Component.deps.json

接配置中心时,一般怎么配

如果你们已经用配置中心,最少通常要准备这几个信息:

{
"SettingCenter": {
"NetLocal": "https://config.example.com/",
"Namespace": "dev",
"Application": "Aegis",
"Config": [
"AppConfig",
"SysConfig"
],
"StoragePath": "/data/config-cache"
}
}

接进来以后,业务代码的读取方式通常不用改,还是走 ConfigManager

怎么判断配置链路通了

起步阶段,先看下面几项:

  • ConfigManager.Get(...) 能读到主配置
  • ConfigManager.Get<T>() 能正常绑定对象
  • LoadConfigurations 里的附加配置能读到
  • 依赖配置的组件启动时没有报错

如果你们用了配置中心,再加一条:

  • 远端配置在启动后能正常读取

继续看哪里