当前位置:   article > 正文

ASP.NET Core 基于 Consul 动态配置热更新。_reloadonchange winton.extensions.configuration.con

reloadonchange winton.extensions.configuration.consul

转载自品略图书馆 http://www.pinlue.com/article/2020/04/2610/2610242437945.html

 

背景

通常,.Net 应用程序中的配置存储在配置文件中,例如 App.config、Web.config 或 appsettings.json。从 ASP.Net Core 开始,出现了一个新的可扩展配置框架,它允许将配置存储在配置文件之外,并从命令行、环境变量等等中检索它们。

在传统项目中,修改配置文件,需要登录生产环境进行修改,当项目多的时候,不便于维护和管理。

因此我们通过Consul在线实时配置,则达到了只更改配置不重启服务即可实时响应的目的。实现思路基于Consul的Key/value ,多个Consul 节点之间可以自动同步配置,我们的程序中就是实现ConfigurationProvider,监听Consul变化。

Consul 配置

关于 下载安装,可以参考:

【架构篇】.net/c# 基于 Consul 实现分布式配置之Key/Value存储

https://down.itsvse.com/k/zdxr0g.html

ASP.NET Core 配置

首先,安装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>(); }); }}

关于 Configuration 更多配置,可以参考:

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1

配置 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的值,这就实现了动态配置功能,无需重新网站,就实现了配置文件的热更新。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/876322
推荐阅读
相关标签
  

闽ICP备14008679号