相关文章推荐
有情有义的馒头  ·  $ cat No such file ...·  1 年前    · 
飘逸的蘑菇  ·  What is WC assistant? ...·  1 年前    · 
英勇无比的仙人掌  ·  ReflectionUtils ...·  1 年前    · 
火星上的单杠  ·  VB.NET工作记录 - ...·  1 年前    · 

通常,.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 Consul

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

原文链接:https://down.itsvse.com/k/of9b7k.html

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。

声明: 本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。