<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      造輪子-AgileConfig基于.NetCore的一個輕量級配置中心

      微服務確實是行業的一個趨勢,我自己也在把一些項目往微服務架構遷移。玩微服務架構配置中心是一個繞不過去的東西,有很多大牌的可以選,比如spring-cloud-config,apoll,disconf等等。而我為什么還要造一個輪子呢?一來這些都不是.net實現的,我就想試試用.net core實現一個,而且他們也對.net不太友好,也只有apoll提供了官方的.net客戶端。二來這些組件都太重量級了,比如apoll,光跑起來就要部署多個節點(admin,portal,meta sevice)還要依賴eureka。很多舊的項目往微服務遷移的時候并不是一下次全部調整完成的,可能是一步步來的,比如先把所有的服務都容器化,并沒有使用微服務全家桶。而且有的項目也不需要微服務全家桶,畢竟微服務不是銀彈,很多項目單體結構就足夠了,有些項目傳統的SOA架構也可以了。(嘮叨一句,那種毫無流量毫無并發的項目,幾人幾天就搞完的強上微服務真的好嗎?)但是這些項目也可能是分布式的,容器化部署的,那么這些項目我覺得也是需要配置中心的,因為在分布式、容器化環境下更改配置實在是太麻煩了??梢哉f配置中心并不是微服務獨有的。基于以上原因我提煉了一些配置中心必備的功能,做的盡量簡單(陋),開發了AgileConfig,為.net core的生態盡一份綿薄之力。

      Github求star: AgileConfig

      AgileConfig

      這是一個基于.net core開發的輕量級配置中心。

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

      架構


      AgileConfig的架構比較簡單,主要是分3塊:

      客戶端

      客戶端程序是使用netstandard2.0開發的一個類庫,方便.net core程序接入,nuget搜agileconfig.client就可以安裝??梢栽趩涌蛻舳说臅r候配置多個節點的地址,客戶端會隨機挑選一個進行連接,連接成功后會維持一個websocket長連接。如果連接的節點發生故障導致連接中斷,客戶端會繼續隨機一個節點進行連接,直到連接成功。

      節點、管理程序

      節點是使用asp.net core開發的一個服務。為了部署簡單,直接把管理程序跟節點服務合二為一了。任何一個節點都可以在啟動的時候配置環境變量開啟管理程序功能。

      數據庫

      使用數據庫來存儲數據,目前支持Sqlserver, Mysql, Sqlite 三種數據庫。因為服務端使用EF Core框架訪問數據,原則上只要EF Core支持的數據庫,節點就可以很方便的支持它。

      部署服務端

      初始化數據庫

      用戶只需要手工建一個空庫,所有的表在第一次啟動的時候都會自動生成。目前支持sqlserver,mysql,sqlite三種數據庫。

      使用服務端

      運行服務端

      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
      

      通過docker建立一個agile_config實例,其中有3個環境變量需要配置:

      1. adminConsole 配置程序是否為管理控制臺。如果為true則啟用控制臺功能,訪問該實例會出現管理界面。
      2. db:provider 配置程序的數據庫類型。目前程序支持:sqlite,mysql,sqlserver 三種數據庫。
      3. db:conn 配置數據庫連接串

      初始化管理員密碼

      第一次遠行程序需要初始化管理員密碼

      節點

      AgileConfig支持多節點部署,所有的節點都是平行的。為了簡化部署,AgileConfig并沒有單獨的控制臺程序,請直接使用任意一個節點作為控制臺。當環境變量adminConsole=true時,該節點同時兼備數據節點跟控制臺功能。為了控制臺能夠管理節點,所以需要在控制臺配置節點的信息。

      注意:即使是作為控制臺的數據節點同樣需要添加到管理程序,以便管理它。

      應用

      AgileConfig支持多應用程序接入。需要為每個應用程序配置名稱、ID、秘鑰等信息。

      配置項

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

      客戶端

      控制臺可以查看已連接的客戶端。

      系統日志

      系統日志記錄了AgileConfig生產中的一些關鍵信息。

      使用客戶端

      安裝客戶端

      Install-Package AgileConfig.Client
      

      初始化客戶端

      以asp.net core mvc項目為例:
      修改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"http://多個節點使用逗號分隔
        }
      }
      
      

      修改program:

             public static IHostBuilder CreateHostBuilder(string[] args) =>
                  Host.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration((context, config) =>
                  {
                      //讀取本地配置
                      var localconfig = new ConfigurationBuilder()
                                       .SetBasePath(Directory.GetCurrentDirectory())
                                       .AddJsonFile("appsettings.json").Build();
                      //從本地配置里讀取AgileConfig的相關信息
                      var appId = localconfig["AgileConfig:appId"];
                      var secret = localconfig["AgileConfig:secret"];
                      var nodes = localconfig["AgileConfig:nodes"];
                      //new一個client實例
                      var configClient = new ConfigClient(appId, secret, nodes);
                      //使用AddAgileConfig配置一個新的IConfigurationSource
                      config.AddAgileConfig(configClient);
                      //找一個變量掛載client實例,以便其他地方可以直接使用實例訪問配置
                      ConfigClient = configClient;
                      //注冊配置項修改事件
                      configClient.ConfigChanged += ConfigClient_ConfigChanged;
                  })
                      .ConfigureWebHostDefaults(webBuilder =>
                      {
                          webBuilder.UseStartup<Startup>();
                      });
      

      讀取配置

      AgileConfig支持asp.net core 標準的IConfiguration,跟IOptions模式讀取配置。還支持直接通過AgileConfigClient實例直接讀?。?/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的實例讀取配置
              /// </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");
              }
          }
      

      Github求star:AgileConfig

      關注我的公眾號一起玩轉技術

      posted @ 2020-06-29 16:02  Agile.Zhou  閱讀(8986)  評論(86)    收藏  舉報
      主站蜘蛛池模板: 国产香蕉九九久久精品免费| 亚洲国产精品综合久久20| 国产成人无码免费视频在线| 日韩亚洲国产中文字幕欧美| 国产亚洲精品一区二区不卡| 久久69国产精品久久69软件| 国产亚洲精品午夜福利| 精品国产粉嫩一区二区三区| 亚洲区1区3区4区中文字幕码| 熟女精品视频一区二区三区| 99亚洲男女激情在线观看| 中文成人在线| 日本一区二区三区在线 |观看| A级毛片无码久久精品免费| 美女爽到高潮嗷嗷嗷叫免费网站| 精品一区二区成人码动漫| 激情综合色五月丁香六月亚洲| 亚洲国产成人精品女久久| 欧美一级黄色影院| 国产精品综合一区二区三区| 日韩一区二区在线看精品| 日本不卡一区| 久久男人av资源站| 国产精品理论片| 中文字幕乱偷无码av先锋蜜桃| 噜噜噜噜私人影院| 欧美牲交a欧美牲交aⅴ图片 | 久久久www免费人成精品| 亚洲国产精品无码观看久久| 国产在线精品第一区二区| 欧洲性开放老太大| 亚洲天堂激情av在线| 欧美成人片一区二区三区| 国产自产av一区二区三区性色| 国产桃色在线成免费视频| 国产高清国产精品国产专区| 国产精品自在自线视频| 国产亚洲精品AA片在线爽| 久视频久免费视频久免费| 免费无码又黄又爽又刺激| 亚洲免费观看一区二区三区|