基于.NET Core开发的轻量级分布式配置中心 / .NET Core lightweight configuration server
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Go to file
agile.zhou 3ac6e1300a Support Npg traces 1 day ago
.github update cd yml 4 months ago
src Support Npg traces 1 day ago
test Fix test case 7 days ago
.dockerignore update Dockerfile 3 years ago
.gitattributes 添加 .gitignore 和 .gitattributes。 5 years ago
.gitignore 1. 取消 Value 值必填的限制 8 months ago
.gitmodules Add a ref to AgileConfig.Client module 2 years ago
AgileConfig.sln Refactoring the TinyEventBus 2 weeks ago
CHANGELOG.md Update CHANGELOG.md 7 days ago
Dockerfile Update docker-compose yml 6 months ago
License.txt add license file 4 years ago
README.md Update README.md 3 months ago
README_CN.md Update README_CN.md 2 years ago
README_EN.md Update README_EN.md 2 years ago
docker-compose.yml Update docker-compose yml 6 months ago
dsd remove an unuse ci file 3 years ago

README_EN.md

AgileConfig

Member project of .NET Core Community GitHub Workflow Status GitHub stars Commit Date Nuget Nuget Docker image GitHub license

English | 中文

This is a lightweight configuration center based on .net core . It is easy to deploy , easy to learn , easy to use .

Features

  1. easy to deploy (docker or IIS)
  2. support distributed deploy
  3. multiple environments support
  4. configuration changes takes effect in real time
  5. support IConfiguration , IOptions patten to read configurations
  6. restful api
  7. version management

Demo Project AgileConfig Server Demo username admin password 123456
client project AgileConfig_Client
samples
AgileConfigMVCSample
AgileConfig WPFSample
AgileConfig ConsoleSample

API:
restful api

ChangeLog

Changelog

architecture

client

A .net client to read configurations from server node .

node

Node is just a .net core app . Client connect to the node to read configurations . Any node can be an admin console to manage configuration .

database

AgileConfig can use many database to persist configurations .
dbprovider : sqlserver = SqlServer
mysql = MySql
sqlite = Sqlite
npgsql = PostgreSql
oracle = Oracle

useage

run node

sudo docker run \
--name agile_config \
-e TZ=Asia/Shanghai \
-e adminConsole=true \
-e db__provider=sqlite \
-e db__conn="Data Source=agile_config.db" \
-p 5000:5000 \
-v /etc/localtime:/etc/localtime \
#-v /your_host_dir:/app/db \
-d kklldog/agile_config:latest

use client

install client lib from nuget

Install-Package AgileConfig.Client

add a agileconfig section in appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",

  //agile_config
  "AgileConfig": {
    "appId": "app",
    "secret": "xxx",
    "nodes": "http://localhost:5000,http://localhost:5001",
    "name": "client_name",
    "tag": "tag1",
    "env": "dev"
  }
}

appsettings.json

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            //default appsettings.json
            config.AddAgileConfig(arg => Console.WriteLine($"config changed , action:{arg.Action} key:{arg.Key}"));
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
  -----or------
  
   public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseAgileConfig(e => Console.WriteLine($"configs {e.Action}"))
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

appsettings.{env}.json

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            var envName = context.HostingEnvironment.EnvironmentName;
            var configClient = new ConfigClient($"appsettings.{envName}.json");
            config.AddAgileConfig(configClient, arg => Console.WriteLine($"config changed , action:{arg.Action} key:{arg.Key}"));
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

read configuration

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IConfiguration _IConfiguration;
    private readonly IOptions<DbConfigOptions> _dbOptions;

    public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptions<DbConfigOptions> dbOptions)
    {
        _logger = logger;
        _IConfiguration = configuration;
        _dbOptions = dbOptions;
    }

    public IActionResult Index()
    {
        return View();
    }

    /// <summary>
    /// By IConfiguration to read
    /// </summary>
    /// <returns></returns>
    public IActionResult ByIConfiguration()
    {
        var userId = _IConfiguration["userId"];
        var dbConn = _IConfiguration["db:connection"];

        ViewBag.userId = userId;
        ViewBag.dbConn = dbConn;

        return View();
    }

    /// <summary>
    /// By Options to read
    /// </summary>
    /// <returns></returns>
    public IActionResult ByOptions()
    {
        var dbConn = _dbOptions.Value.connection;
        ViewBag.dbConn = dbConn;

        return View("ByOptions");
    }
}

dependency injection

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAgileConfig();
    }
}
public class HomeController : Controller
{
    private readonly IConfigClient _configClient

    public HomeController(IConfigClient configClient)
    {
        _configClient = configClient;
    }

    public IActionResult Index()
    {
        return View();
    }

    /// <summary>
    /// By IConfigClient to read
    /// </summary>
    /// <returns></returns>
    public IActionResult ByIConfigClient()
    {
        var userId = _configClient["userId"];
        var dbConn = _configClient["db:connection"];

        foreach (var item in _configClient.Data)
        {
            Console.WriteLine($"{item.Key} = {item.Value}");
        }

        ViewBag.userId = userId;
        ViewBag.dbConn = dbConn;

        return View();
    }
}

screenshots






donate

If this project is helpful to you, please scan the QR code below for a cup of coffee.

thanks 💖💖💖

大鹏¥66.66 , 瘦草¥6.66 + 88 , ziana¥10.0 , Nullable¥9.99 , *三 ¥6.66 , HHM ¥6.66 , *。 ¥6.66 , 微笑刺客 ¥6.66 ,飞鸟与鱼 ¥38.88, *航 ¥9.9, *啦 ¥6.66, *海 ¥6.66, Dyx 邓杨喜 ¥30

contact me

mailminj.zhou@gmail.com
qq group1022985150