黄中银 bfb3470ab6 纠正文档 22 часов назад
..
Apq.Cfg.Consul.csproj 7569ebfae2 标签 1 день назад
CfgBuilderExtensions.cs 939c00da07 远程配置中心扩展 1 день назад
ConsulCfgOptions.cs 939c00da07 远程配置中心扩展 1 день назад
ConsulCfgSource.cs 939c00da07 远程配置中心扩展 1 день назад
README.md bfb3470ab6 纠正文档 22 часов назад

README.md

Apq.Cfg.Consul

NuGet

Consul 配置中心支持,为 Apq.Cfg 提供从 Consul KV 存储读取配置的能力,支持热重载。

安装

dotnet add package Apq.Cfg.Consul

快速开始

using Apq.Cfg;
using Apq.Cfg.Consul;

var cfg = new CfgBuilder()
    .AddJson("config.json", level: 0)
    .AddConsul(options =>
    {
        options.Address = "http://localhost:8500";
        options.KeyPrefix = "app/config/";
        options.EnableHotReload = true;
    }, level: 10)
    .Build();

// 读取配置
var value = cfg.Get("Database:Host");

// 订阅配置变更
cfg.ConfigChanges.Subscribe(change =>
{
    Console.WriteLine($"配置变更: {change.Key} = {change.NewValue}");
});

配置选项

选项 类型 默认值 说明
Address string http://localhost:8500 Consul 服务地址
Token string? null ACL Token(可选)
Datacenter string? null 数据中心名称(可选)
KeyPrefix string config/ KV 键前缀
EnableHotReload bool true 是否启用热重载
WaitTime TimeSpan 5 分钟 Blocking Query 等待时间
ConnectTimeout TimeSpan 10 秒 连接超时时间
ReconnectInterval TimeSpan 5 秒 重连间隔
DataFormat ConsulDataFormat KeyValue 配置数据格式
SingleKey string? null 当 DataFormat 为 Json/Yaml 时的单个 key

数据格式

KeyValue 模式(默认)

每个 Consul KV 键对应一个配置项:

config/Database/Host = "localhost"
config/Database/Port = "5432"
config/App/Name = "MyApp"
.AddConsul(options =>
{
    options.KeyPrefix = "config/";
    options.DataFormat = ConsulDataFormat.KeyValue;
})

JSON 模式

单个 key 存储 JSON 格式的配置:

config/app-config = {"Database":{"Host":"localhost","Port":5432}}
.AddConsul(options =>
{
    options.KeyPrefix = "config/";
    options.DataFormat = ConsulDataFormat.Json;
    options.SingleKey = "app-config";
})

YAML 模式

单个 key 存储 YAML 格式的配置:

.AddConsul(options =>
{
    options.DataFormat = ConsulDataFormat.Yaml;
    options.SingleKey = "app-config";
})

热重载

启用 EnableHotReload 后,配置源会使用 Consul 的 Blocking Query 机制监听配置变更,当配置发生变化时自动更新。

// 启用热重载
.AddConsul(options =>
{
    options.EnableHotReload = true;
    options.WaitTime = TimeSpan.FromMinutes(5);  // Blocking Query 超时时间
})

认证

ACL Token

.AddConsul(options =>
{
    options.Address = "http://localhost:8500";
    options.Token = "your-acl-token";
})

多层级配置

Consul 配置源可以与其他配置源组合使用,通过 level 参数控制优先级:

var cfg = new CfgBuilder()
    .AddJson("config.json", level: 0)           // 基础配置
    .AddJson("config.local.json", level: 1)     // 本地覆盖
    .AddConsul(options =>                        // Consul 远程配置(最高优先级)
    {
        options.Address = "http://consul:8500";
        options.KeyPrefix = "myapp/";
    }, level: 10)
    .Build();

依赖

  • Consul - Consul .NET 客户端