【架构篇】ASP.NET Core 基于 Consul 动态配置热更新
背景
通常,.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
【架构篇】ASP.NET Core 基于 Consul 动态配置热更新的更多相关文章
- ASP.NET Core基于K8S的微服务电商案例实践--学习笔记
摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...
- ASP.NET Core 基于JWT的认证(二)
ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...
- ASP.NET Core 基于JWT的认证(一)
ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...
- Asp.Net Core基于JWT认证的数据接口网关Demo
近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...
- ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置
前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...
- 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之三 —— 配置
==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...
- [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]
[接上篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义 ...
- [ASP.NET Core 3框架揭秘] 配置[3]:配置模型总体设计
在<读取配置数据>([上篇],[下篇])上面一节中,我们通过实例的方式演示了几种典型的配置读取方式,接下来我们从设计的维度来重写认识配置模型.配置的编程模型涉及到三个核心对象,分别通过三个 ...
- [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]
.NET Core采用的这个全新的配置模型的一个主要的特点就是对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源.如果采用物理文件作为配置源,我们可以选择 ...
随机推荐
- Informatica9.5.1创建资源库出错找不到libpmora8.so
错误信息: Database driver event...Error occurred loading library [libclntsh.so.10.1: cannot open shared ...
- 微信小程序框架分析小练手(三)——仿香哈菜谱小程序制作
香哈菜谱是一款围绕美食而成的小程序,在这里可以查看各式各样的菜谱. 一.打开微信开发者工具,新建一个项目:xhcp.如下图: 二.建立如下的一些目录: 三.将底部标签导航图标.美食轮播图片.宫格导航图 ...
- SpringMVC 参数映射与文件上传
handler参数映射: 接下来就是Spring的各个处理细节了,无论框架如何疯转其实我们处理请求的流程是不变的,设计到的操作也是固定的,举个例子,当我们要实现一个登陆功能时: 创建一个用于处理登录请 ...
- 使用npm发布、查看、引用、删除自己的包[小白推荐]
前言 怎么使用npm发布自己的组件包呢?博主看了不少相关的文章,都没有一个好的讲述.要么丢三落四,要么就是复杂到外行人根本看不懂,甚至无从下手.于是,在博主的潜心钻研下,终于成功了!所以,我打算写一 ...
- 自己动手写个异步IO函数 --(基于 c# Task)
前言 对于服务端,达到高性能.高扩展离不开异步.对于客户端,函数执行时间是1毫秒还是100毫秒差别不大,没必要为这一点点时间煞费苦心.对于异步,好多人还有误解,如: 异步就是多线程:异步就是如何 ...
- python学习--curl
PyCurl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,PycURL 是一个非常快速(参考多并发操作) ...
- Python 进行目标检测
一.前言 从学单片机开始鼓捣C语言,到现在为了学CV鼓捣Python,期间在CSDN.简书.博客园和github这些地方得到了很多帮助,所以也想把自己做的一些小东西分享给大家,希望能帮助到别人.记录人 ...
- 关于在osgearth 中 出现 arial.ttf : file not handled 的问题
这是由于配置osg时 freetype 插件没有配置到位. 我个人的解决方法 打开CMAKE,点击advance,不勾选OSG_TEXT_USE_FONTCONFIG. 同时将freetype路径设置 ...
- linux 学习操作小计
屌丝最近在接触lamp开发 把工作中遇到的 问题和 一些常用的操作记下来.以便以后去翻阅 (1)linux下备份mysql数据库方法 #mysqldump -u root -p dbname > ...
- php 绘制验证码 示例
<?php header("content-type:image/jpeg"); session_start();//开启session //宽高 字体大小 $width=1 ...