如果是開發微服務的專案,多個服務的配置管理起來比較麻煩,需要集中管理,也就是需要有配置中心:
consul整合配置中心的思路:讀取配置檔案時不在從本地的應用中讀取,而是從consul的KEY/value中讀取
整合步驟:
1、首先,安裝Consul,具體安裝步驟本文就不詳細介紹了,請移步我的系列文章01,當開啟 http://127.0.0.1:8500 可以看到Consul的UI介面代表安裝成功。
2、安裝NuGet包:Winton.Extensions.Configuration.Consul
3、Program.cs檔案修改
.ConfigureAppConfiguration((hostingContext, config) => { var cancellationTokenSource = new CancellationTokenSource(); var env = hostingContext.HostingEnvironment; hostingContext.Configuration = config.Build(); string consul_url = hostingContext.Configuration["Consul_Url"]; config.AddConsul( $"{env.ApplicationName}/appsettings.{env.EnvironmentName}.json", options => { options.Optional = true; options.ReloadOnChange = true; options.OnLoadException = exceptionContext => { exceptionContext.Ignore = true; }; options.ConsulConfigurationOptions = cco => { cco.Address = new Uri(consul_url); }; } ); hostingContext.Configuration = config.Build(); })
4、appsettings.Development.json增加配置
"Consul_Url": "http://192.168.139.129:8500",
5、注入客戶端服務類
context.Services.AddTransient<IConsulClient, ConsulClient>();
6、在consul客戶端新建配置檔案,也就是將你的配置檔案拷貝過來就行了,注意:之前的註釋類容在這不可用,要去掉
7、通過api可以測試一下,看你在consul中修改這個檔案後是否有效
我測試後是Ok的,這樣就可以替換掉所有的服務配置,將配置檔案集中管理起來了
細節:consul中的配置檔案及所有在路徑我們用了這段話:
$"{env.ApplicationName}/appsettings.{env.EnvironmentName}.json",
其中 env.EnvironmentName 在釋出應該時通過dockerfile檔案是可以改的,傳的引數如下:
這樣你在Consul中的檔名就要中改成:appsettings.Production.json