通常,.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
版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。
声明:
本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。