<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          AgileConfig輕量級(jí)配置中心

          聯(lián)合創(chuàng)作 · 2023-09-28 10:29

          AgileConfig 是一個(gè)基于 .net core 開發(fā)的輕量級(jí)配置中心。

          1. 部署簡(jiǎn)單,最少只需要一個(gè)數(shù)據(jù)節(jié)點(diǎn),支持docker部署
          2. 支持多節(jié)點(diǎn)分布式部署來(lái)保證高可用
          3. 配置支持按應(yīng)用隔離,應(yīng)用內(nèi)配置支持分組隔離
          4. 使用長(zhǎng)連接技術(shù),配置信息實(shí)時(shí)推送至客戶端
          5. 支持IConfiguration,IOptions模式讀取配置,原程序幾乎可以不用改造
          6. 配置修改支持版本記錄,隨時(shí)回滾配置
          7. 如果所有節(jié)點(diǎn)都故障,客戶端支持從本地緩存讀取配置

          服務(wù)端項(xiàng)目AgileConfig

          客戶端項(xiàng)目AgileConfig_Client

          示例項(xiàng)目AgileConfigMVCSample

          架構(gòu)

          AgileConfig的架構(gòu)比較簡(jiǎn)單,主要是分3塊:

          客戶端

          客戶端程序是使用netstandard2.0開發(fā)的一個(gè)類庫(kù),方便.net core程序接入,nuget搜a(bǔ)gileconfig.client就可以安裝??梢栽趩?dòng)客戶端的時(shí)候配置多個(gè)節(jié)點(diǎn)的地址,客戶端會(huì)隨機(jī)挑選一個(gè)進(jìn)行連接,連接成功后會(huì)維持一個(gè)websocket長(zhǎng)連接。如果連接的節(jié)點(diǎn)發(fā)生故障導(dǎo)致連接中斷,客戶端會(huì)繼續(xù)隨機(jī)一個(gè)節(jié)點(diǎn)進(jìn)行連接,直到連接成功。

          節(jié)點(diǎn)、管理程序

          節(jié)點(diǎn)是使用asp.net core開發(fā)的一個(gè)服務(wù)。為了部署簡(jiǎn)單,直接把管理程序跟節(jié)點(diǎn)服務(wù)合二為一了。任何一個(gè)節(jié)點(diǎn)都可以在啟動(dòng)的時(shí)候配置環(huán)境變量開啟管理程序功能。

          數(shù)據(jù)庫(kù)

          使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),目前支持Sqlserver, Mysql, Sqlite, PostgreSql,Oracle 五種數(shù)據(jù)庫(kù)。最新版本已經(jīng)切換為Freesql為數(shù)據(jù)訪問(wèn)組件。Freesql對(duì)多數(shù)據(jù)庫(kù)的支持更加強(qiáng)勁,特別是對(duì)國(guó)產(chǎn)數(shù)據(jù)庫(kù)的支持。但是因?yàn)闆](méi)有國(guó)產(chǎn)數(shù)據(jù)庫(kù)的測(cè)試環(huán)境,本項(xiàng)目并未支持,如果有需要我可是開分支嘗試支持,但是測(cè)試工作就要靠用戶啦。

          注意:如果使用<=1.0.4之前版本的用戶請(qǐng)不要更新,因?yàn)镋FCore跟Freesql自動(dòng)建的庫(kù)可能存在稍許差異,保險(xiǎn)起見(jiàn)不要更新吧。

          部署服務(wù)端

          初始化數(shù)據(jù)庫(kù)

          用戶只需要手工建一個(gè)空庫(kù),所有的表在第一次啟動(dòng)的時(shí)候都會(huì)自動(dòng)生成。目前支持sqlserver,mysql,sqlite, PostgreSql,Oracle 五種數(shù)據(jù)庫(kù)。 provider對(duì)照:
          sqlserver = SqlServer
          mysql = MySql
          sqlite = Sqlite
          npgsql = PostgreSql
          oracle = Oracle

          使用服務(wù)端

          運(yùn)行服務(wù)端

           
          1. sudo docker run --name agile_config -e adminConsole=true -e db:provider=sqlite -e db:conn="Data Source=agile_config.db" -p 5000:5000 kklldog/agile_config:latest

          通過(guò)docker建立一個(gè)agile_config實(shí)例,其中有3個(gè)環(huán)境變量需要配置:

          1. adminConsole 配置程序是否為管理控制臺(tái)。如果為true則啟用控制臺(tái)功能,訪問(wèn)該實(shí)例會(huì)出現(xiàn)管理界面。
          2. db:provider 配置程序的數(shù)據(jù)庫(kù)類型。目前程序支持:sqlite,mysql,sqlserver,npgsql, oracle 五種數(shù)據(jù)庫(kù)。
          3. db:conn 配置數(shù)據(jù)庫(kù)連接串

          初始化管理員密碼

          第一次運(yùn)行程序需要初始化管理員密碼

          節(jié)點(diǎn)

          AgileConfig支持多節(jié)點(diǎn)部署,所有的節(jié)點(diǎn)都是平行的。為了簡(jiǎn)化部署,AgileConfig并沒(méi)有單獨(dú)的控制臺(tái)程序,請(qǐng)直接使用任意一個(gè)節(jié)點(diǎn)作為控制臺(tái)。當(dāng)環(huán)境變量adminConsole=true時(shí),該節(jié)點(diǎn)同時(shí)兼?zhèn)鋽?shù)據(jù)節(jié)點(diǎn)跟控制臺(tái)功能。為了控制臺(tái)能夠管理節(jié)點(diǎn),所以需要在控制臺(tái)配置節(jié)點(diǎn)的信息。

          注意:即使是作為控制臺(tái)的數(shù)據(jù)節(jié)點(diǎn)同樣需要添加到管理程序,以便管理它。

          應(yīng)用

          AgileConfig支持多應(yīng)用程序接入。需要為每個(gè)應(yīng)用程序配置名稱、ID、秘鑰等信息。

          配置項(xiàng)

          配置完應(yīng)用信息后可以為每個(gè)應(yīng)用配置配置項(xiàng)。配置項(xiàng)支持分組。新添加的配置并不會(huì)被客戶端感知到,需要手工點(diǎn)擊“上線”才會(huì)推送給客戶端。已上線的配置如果發(fā)生修改、刪除、回滾操作,會(huì)實(shí)時(shí)推送給客戶端。版本歷史記錄了配置的歷史信息,可以回滾至任意版本。

          客戶端

          控制臺(tái)可以查看已連接的客戶端。

          系統(tǒng)日志

          系統(tǒng)日志記錄了AgileConfig生產(chǎn)中的一些關(guān)鍵信息。

          使用客戶端

          客戶端AgileConfig_Client是使用.net core standard2.0編寫的一個(gè)類庫(kù),已發(fā)布到nuget,方便用戶集成。

          使用nuget安裝客戶端類庫(kù)

          Install-Package AgileConfig.Client
          

          初始化客戶端

          以asp.net core mvc項(xiàng)目為例:

          {
            "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"http://多個(gè)節(jié)點(diǎn)使用逗號(hào)分隔
            }
          }
          
          
                 public static IHostBuilder CreateHostBuilder(string[] args) =>
                      Host.CreateDefaultBuilder(args)
                      .ConfigureAppConfiguration((context, config) =>
                      {
                          //讀取本地配置
                          var localconfig = new ConfigurationBuilder()
                                           .SetBasePath(Directory.GetCurrentDirectory())
                                           .AddJsonFile("appsettings.json").Build();
                          //從本地配置里讀取AgileConfig的相關(guān)信息
                          var appId = localconfig["AgileConfig:appId"];
                          var secret = localconfig["AgileConfig:secret"];
                          var nodes = localconfig["AgileConfig:nodes"];
                          //new一個(gè)client實(shí)例
                          var configClient = new ConfigClient(appId, secret, nodes);
                          //使用AddAgileConfig配置一個(gè)新的IConfigurationSource
                          config.AddAgileConfig(configClient);
                          //找一個(gè)變量掛載client實(shí)例,以便其他地方可以直接使用實(shí)例訪問(wèn)配置
                          ConfigClient = configClient;
                          //注冊(cè)配置項(xiàng)修改事件
                          configClient.ConfigChanged += ConfigClient_ConfigChanged;
                      })
                          .ConfigureWebHostDefaults(webBuilder =>
                          {
                              webBuilder.UseStartup<Startup>();
                          });
          

          讀取配置

          AgileConfig支持asp.net core 標(biāo)準(zhǔn)的IConfiguration,跟IOptions模式讀取配置。還支持直接通過(guò)AgileConfigClient實(shí)例直接讀?。?/p>

          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>
                  /// 使用IConfiguration讀取配置
                  /// </summary>
                  /// <returns></returns>
                  public IActionResult ByIConfiguration()
                  {
                      var userId = _IConfiguration["userId"];
                      var dbConn = _IConfiguration["db:connection"];
          
                      ViewBag.userId = userId;
                      ViewBag.dbConn = dbConn;
          
                      return View();
                  }
          
                  /// <summary>
                  /// 直接使用ConfigClient的實(shí)例讀取配置
                  /// </summary>
                  /// <returns></returns>
                  public IActionResult ByInstance()
                  {
                      var userId = Program.ConfigClient["userId"];
                      var dbConn = Program.ConfigClient["db:connection"];
          
                      ViewBag.userId = userId;
                      ViewBag.dbConn = dbConn;
          
                      return View("ByIConfiguration");
                  }
          
                  /// <summary>
                  /// 使用Options模式讀取配置
                  /// </summary>
                  /// <returns></returns>
                  public IActionResult ByOptions()
                  {
                      var dbConn = _dbOptions.Value.connection;
                      ViewBag.dbConn = dbConn;
          
                      return View("ByIConfiguration");
                  }
              }
          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品久久久久毛片SUV | AV影院啪啪啪 | 91无码人妻一区二区三区 | 婷婷俺也去 | 豆花视频在线观看免费无码 |