一般,.Net 應用程序中的配置存儲在配置文件中,例如 App.config、Web.config 或 appsettings.json。從 ASP.Net Core 開始,出現了一個新的可擴展配置框架,它容許將配置存儲在配置文件以外,並從命令行、環境變量等等中檢索它們。html
在傳統項目中,修改配置文件,須要登陸生產環境進行修改,當項目多的時候,不便於維護和管理。web
所以咱們經過Consul在線實時配置,則達到了只更改配置不重啓服務便可實時響應的目的。實現思路基於Consul的Key/value ,多個Consul 節點之間能夠自動同步配置,咱們的程序中就是實現ConfigurationProvider,監聽Consul變化。json
關於 下載安裝,能夠參考:c#
【架構篇】.net/c# 基於 Consul 實現分佈式配置之Key/Value存儲架構
https://down.itsvse.com/k/zdxr0g.htmlapp
首先,安裝nuget包,命令以下:框架
Install-Package Consul Install-Package Winton.Extensions.Configuration.Consul
修改 Program.cs 文件,代碼以下:asp.net
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using System; using Winton.Extensions.Configuration.Consul; namespace WebApplication1 { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { var env = hostingContext.HostingEnvironment; hostingContext.Configuration = config.Build(); string consul_url = hostingContext.Configuration["Consul_Url"]; Console.WriteLine(consul_url); Console.WriteLine(env.ApplicationName); Console.WriteLine(env.EnvironmentName); 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(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); } }
關於 Configuration 更多配置,能夠參考:分佈式
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1ide
配置 Consul 服務中心地址,修改 appsettings.json 文件,配置以下:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "Consul_Url": "http://127.0.0.1:8500" }
控制器代碼以下:
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace WebApplication1.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public readonly IConfiguration _configuration; public HomeController(ILogger<HomeController> logger, IConfiguration configuration) { _logger = logger; _configuration = configuration; } public IActionResult Index() { return Ok("獲取test值:" + _configuration["test"]); } } }
啓動項目,以下圖:
因爲,咱們 Consul 並無在配置 test 的值,因此獲取爲空。
打開 http://127.0.0.1:8500/ui/dc1/kv 配置項目所須要的文件。
項目讀取的配置文件地址爲:
「/WebApplication1/appsettings.Development.json」
所以,咱們須要新建「WebApplication1」文件夾和「appsettings.Development.json」文件,以下圖:
Value 以下:
{ "test": "itsvse" }
保存後,咱們從新刷新網站,以下圖:
測試中文字符,也沒有任何問題,以下圖:
能夠看到,成功獲取到了test的值,這就實現了動態配置功能,無需從新網站,就實現了配置文件的熱更新。