AgileConfig輕量級配置中心自第一個版本發布不知不覺已經半年了,在并未進行什么推廣的情況下收到了250個star,對我有很大的鼓舞,并且也有不少同學試用,并且給出了寶貴的意見,非常感謝他們,其中有一些意見非常好,但是一直沒有開發,主要是一來下半年比較忙(懶),二來我不想把AgileConfig搞的過于復雜,但其中有個需求被很多同學提及過,就是希望能支持應用間的繼承(關聯),類似Apollo的公共namespace的概念,比如微服務應用之間有不少公共配置項,可以配置在一個應用內,然后其他應用繼承它,這樣每個應用就不用重復的配置公共配置,我思考了一下,這個配置確實是個非常有用的功能,于是花了點時間實作了它,
Github地址:https://github.com/kklldog/AgileConfig 求star ,
下面的示例簡單演示下如何使用AgileConfig讀取配置并且使用繼承功能
使用docker啟動一個AgileConfig實體
sudo docker run --name agile_config -e adminConsole=true -e db:provider=sqlserver -e db:conn="Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =." -p 5000:5000 kklldog/agile_config:latest
使用docker命令運行一個AgileConfig實體,這是最簡單的方法,當然你也可以拉原始碼下來編譯發布使用IIS來運行它,
配置環境變數:
adminConsole=true 開啟控制臺功能
db:provider=sqlserver 資料庫為SqlServer
db:conn="Persist Security Info = False; User ID =dev; Password =dev@123,; Initial Catalog =agile_config_test; Server =." 配置資料庫連接
-p 5000:5000 容器的5000口映射本地的5000口
配置AgileConfig
第一次運行需要配置管理密碼
密碼配置完成后重新登錄進系統,開始配置節點

在設計的時候節點跟控制臺是分開的,但是為了部署簡單最后節點跟控制臺被實作在一起了,所以采用單節點部署的時候,該實體既是節點又是控制臺,所以也需要把本節點的地址加入到節點串列里,以便控制臺能管理到,
添加應用
AgileConfig的初始化完成了,現在我們開始添加應用,
添加“公共應用”

添加應用名稱,應用id,勾選“可被繼承”,點擊確定完成公共的創建,系統只支持一層的繼承,可被繼承的應用不能再繼承其它應用,
創建完成后為公共應用添加配置項

為公共應用添加一個配置項:鍵為public_key_01 值為0001 ,
添加“私有應用”

添加一個私有應用,不要選“可被繼承”,點擊繼承應用欄的加號會彈出可以被的繼承應用串列,選擇“公共應用”,點擊“確定”完成創建,
為私有應用創建配置項

為私有應用添加一個配置項:鍵為private_key_01 值為0002 ,
注意:把所有的配置都上線,否則客戶端讀不到配置,
客戶端讀取配置
創建Asp.net Core WebApi專案
我們創建一個WebApi專案做為客戶端來演示如何讀取配置

使用nuget參考AgileConfig.Client
Install-Package AgileConfig.Client -Version 1.1.0
集成AgileConfig.Client
使用nuget安裝成功后,切換到Program.cs開始集成AgileConfigClient,
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx,cfg)=> {
var appId = "private_01";
var secret = "1";
var nodes = "http://localhost:5000";
//new一個client實體
var configClient = new ConfigClient(appId, secret, nodes);
//使用AddAgileConfig配置一個新的IConfigurationSource
cfg.AddAgileConfig(configClient);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
使用IHostBuilder的ConfigureAppConfiguration把我們的ConfigClient注入進去,這里我們的ConfigClient配置的是私有應用的id:private_01 ,
讀取配置
前期作業都完成了,現在我們可以開始撰寫讀取配置的代碼了,
新建一個ReadConfigController:
[ApiController]
[Route("[controller]")]
public class ReadConfigController : ControllerBase
{
private readonly IConfiguration _IConfiguration;
public ReadConfigController(IConfiguration configuration)
{
_IConfiguration = configuration;
}
[HttpGet]
public String Get()
{
var publicConfig = _IConfiguration["public_key_01"];
var privateConfig = _IConfiguration["private_key_01"];
return $"publicConfig:{publicConfig} , privateConfig:{privateConfig}";
}
}
通過建構式注入IConfiguration,然后通過它直接讀取公共配置,私有配置,并且直接把字串回傳回去,
注意修改一下客戶端程式的啟動埠,默認5000跟上面的AgileConfig實體占用的埠沖突,
運行一下
運行客戶端專案,然后在瀏覽器里輸入http://localhost:51605/readconfig

可以看到我們的公共配置跟私有配置都準確的讀取到了,
總結
通過以上一個簡單的示例,演示了如何使用AgileConfig讀取配置以及如何在應用間繼承配置,以上示例并未展示所有內容,使用繼承的時候需要注意一下幾點:
- 當私有應用的配置跟被繼承應用重復時,私有應用的配置會覆寫被繼承應用的配置
- 如果一個應用被標記為"可被繼承"后,這個應用自己不能繼續繼承其它應用
- 一個私有應用可以繼承多個“可被繼承”的應用,如果多個繼承的應用間出現重復的配置,那么將按照繼承的順序,后面的應用會覆寫前面的應用,
如果喜歡這個專案的,請給我star吧,謝謝,
Github地址:https://github.com/kklldog/AgileConfig
關注我的公眾號一起玩轉技術

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/228240.html
標籤:.NET Core
