通常,.Net 應(yīng)用程序中的配置存儲(chǔ)在配置文件中,例如 App.config、Web.config 或 appsettings.json。從 ASP.Net Core 開始,出現(xiàn)了一個(gè)新的可擴(kuò)展配置框架,它允許將配置存儲(chǔ)在配置文件之外,并從命令行、環(huán)境變量等等中檢索它們。
在傳統(tǒng)項(xiàng)目中,修改配置文件,需要登錄生產(chǎn)環(huán)境進(jìn)行修改,當(dāng)項(xiàng)目多的時(shí)候,不便于維護(hù)和管理。
因此我們通過(guò)Consul在線實(shí)時(shí)配置,則達(dá)到了只更改配置不重啟服務(wù)即可實(shí)時(shí)響應(yīng)的目的。實(shí)現(xiàn)思路基于Consul的Key/value ,多個(gè)Consul 節(jié)點(diǎn)之間可以自動(dòng)同步配置,我們的程序中就是實(shí)現(xiàn)ConfigurationProvider,監(jiān)聽Consul變化。
關(guān)于 下載安裝,可以參考:
【架構(gòu)篇】.net/c# 基于 Consul 實(shí)現(xiàn)分布式配置之Key/Value存儲(chǔ)
https://down.itsvse.com/k/zdxr0g.html
首先,安裝nuget包,命令如下:
Install-Package ConsulInstall-Package Winton.Extensions.Configuration.Consul
修改 Program.cs 文件,代碼如下:
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>(); }); }}
關(guān)于 Configuration 更多配置,可以參考:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
配置 Consul 服務(wù)中心地址,修改 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"]); } }}
啟動(dòng)項(xiàng)目,如下圖:
由于,我們 Consul 并沒(méi)有在配置 test 的值,所以獲取為空。
打開 http://127.0.0.1:8500/ui/dc1/kv 配置項(xiàng)目所需要的文件。
項(xiàng)目讀取的配置文件地址為:
“/WebApplication1/appsettings.Development.json”
因此,我們需要新建“WebApplication1”文件夾和“appsettings.Development.json”文件,如下圖:
Value 如下:
{ "test": "itsvse"}
保存后,我們重新刷新網(wǎng)站,如下圖:
測(cè)試中文字符,也沒(méi)有任何問(wèn)題,如下圖:
可以看到,成功獲取到了test的值,這就實(shí)現(xiàn)了動(dòng)態(tài)配置功能,無(wú)需重新網(wǎng)站,就實(shí)現(xiàn)了配置文件的熱更新。
聯(lián)系客服