• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【架构篇】ASP.NETCore基于Consul动态配置热更新

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

背景

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

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETMVC的JavaScriptResult发布时间:2022-07-10
下一篇:
关于使用JavaScript触发ASP.NETValidator验证的问题发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap