黄中银 7569ebfae2 标签 3 hours ago
..
ApolloCfgOptions.cs 939c00da07 远程配置中心扩展 9 hours ago
ApolloCfgSource.cs 939c00da07 远程配置中心扩展 9 hours ago
Apq.Cfg.Apollo.csproj 7569ebfae2 标签 3 hours ago
CfgBuilderExtensions.cs 939c00da07 远程配置中心扩展 9 hours ago
README.md 939c00da07 远程配置中心扩展 9 hours ago

README.md

Apq.Cfg.Apollo

NuGet

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

安装

dotnet add package Apq.Cfg.Apollo

快速开始

using Apq.Cfg;
using Apq.Cfg.Apollo;

var cfg = CfgBuilder.Create()
    .AddJson("config.json", level: 0)
    .AddApollo(options =>
    {
        options.AppId = "my-app";
        options.MetaServer = "http://localhost:8080";
        options.Cluster = "default";
        options.Namespaces = new[] { "application" };
        options.EnableHotReload = true;
    }, level: 10)
    .Build();

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

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

配置选项

选项 类型 默认值 说明
AppId string "" Apollo 应用 ID
MetaServer string http://localhost:8080 Meta Server 地址
Cluster string default 集群名称
Namespaces string[] ["application"] 命名空间列表
Secret string? null 访问密钥(可选)
EnableHotReload bool true 是否启用热重载
ConnectTimeout TimeSpan 10 秒 连接超时时间
LongPollingTimeout TimeSpan 90 秒 长轮询超时时间
DataFormat ApolloDataFormat Properties 配置数据格式

多命名空间

Apollo 支持从多个命名空间读取配置:

.AddApollo(options =>
{
    options.AppId = "my-app";
    options.MetaServer = "http://localhost:8080";
    options.Namespaces = new[] { "application", "common", "database" };
})

当配置多个命名空间时,非 application 命名空间的配置键会自动添加命名空间前缀:

// application 命名空间的配置
var appName = cfg.Get("App:Name");

// common 命名空间的配置
var logLevel = cfg.Get("common:Logging:Level");

// database 命名空间的配置
var connStr = cfg.Get("database:ConnectionString");

热重载

启用 EnableHotReload 后,配置源会使用 Apollo 的长轮询通知机制监听配置变更,当配置发生变化时自动更新。

// 启用热重载
.AddApollo(options =>
{
    options.EnableHotReload = true;
    options.LongPollingTimeout = TimeSpan.FromSeconds(90);
})

认证

Secret 签名认证

.AddApollo(options =>
{
    options.AppId = "my-app";
    options.MetaServer = "http://localhost:8080";
    options.Secret = "your-app-secret";
})

多层级配置

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

var cfg = CfgBuilder.Create()
    .AddJson("config.json", level: 0)           // 基础配置
    .AddJson("config.local.json", level: 1)     // 本地覆盖
    .AddApollo(options =>                        // Apollo 远程配置(最高优先级)
    {
        options.AppId = "my-app";
        options.MetaServer = "http://apollo:8080";
    }, level: 10)
    .Build();

配置写入

注意:Apollo 配置源不支持通过 API 写入配置。如需修改配置,请通过 Apollo 管理界面操作。

// 以下代码会抛出 NotSupportedException
cfg.Set("Key", "Value");
await cfg.SaveAsync();  // 抛出异常

简化用法

// 使用简化的扩展方法
var cfg = CfgBuilder.Create()
    .AddApollo("my-app", "http://localhost:8080",
        namespaces: new[] { "application", "common" },
        level: 10)
    .Build();

与其他配置中心对比

特性 Apollo Nacos Consul Etcd
写入支持
多命名空间
多集群
灰度发布
本地缓存 ✅(内置)

依赖

无外部依赖,使用 HTTP API 直接与 Apollo 通信。