配置
大多数项目在配置这块,先把边界分清就够了:
- 配置平时放哪
- 什么情况下本地配置就够了
- 什么时候再接配置中心
先把边界分清
在 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.json 和 appsettings.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里的附加配置能读到- 依赖配置的组件启动时没有报错
如果你们用了配置中心,再加一条:
- 远端配置在启动后能正常读取
继续看哪里
- 想先把项目跑起来:看 快速开始
- 想看初始化里的配置位置:看 项目初始化
- 想接配置中心组件:看 配置中心扩展(Aegis.Configuration.ConfigCenter)