前言

最近项目逐步转向基于.Net Core,目前dotnet core 虽然已出3.0了但还没有特别成熟的框架,要实现微服务,必须要解决配置中心的问题 。不管是不是微服务,节点多了配置文件一个个更改非常麻烦,今天分享一个基于Consul 实现轻量级的配置中心方案。

实现思路基于Consul的Key/value ,多个Consul 节点之间可以自动同步配置,我们的程序中就是实现ConfigurationProvider,监听Consul变化

代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Winton.Extensions.Configuration.Consul; namespace Bo.ServiceB
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var cancellationTokenSource = new CancellationTokenSource();
return WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
hostingContext.Configuration = config.Build();
string consul_url = hostingContext.Configuration["Consul_Url"];
config.AddConsul(
$"{env.ApplicationName}/appsettings.{env.EnvironmentName}.json",
cancellationTokenSource.Token,
options =>
{
options.Optional = true;
options.ReloadOnChange = true;
options.OnLoadException = exceptionContext => { exceptionContext.Ignore = true; };
options.ConsulConfigurationOptions = cco => { cco.Address = new Uri(consul_url); };
}
).AddEnvironmentVariables(); hostingContext.Configuration = config.Build();
}).UseUrls("http://localhost:5012")
.UseStartup<Startup>();
}
}
}

Consul 中Key/Value 配置:

$"{env.ApplicationName}/appsettings.{env.EnvironmentName}.json",

env.ApplicationName :应用程序名称 如:Bo.ServiceB
env.EnvironmentName: appsettings.Development.json

代码中输出AppName配置:

        [HttpGet]
public string Get()
{
return HttpContext.Request.Host.Port + " " + Configuration["AppName"].ToString() + " " + DateTime.Now.ToString();
}

  

查看多个节点同步情况

源码地址:https://github.com/zhangbojr/Consul-key-Value-.git

最新文章

  1. vue.js学习笔记
  2. GpuImage简单使用
  3. 学习笔记:MySQL操作初步
  4. Redis常用命令入门4:集合类型
  5. backtrack下vim的使用
  6. 处于同一个域中的两台Sql server 实例无法连接
  7. 在Unity中如何取得一个Box的Bounds
  8. BNUOJ 1038 Flowers
  9. html笔记 仅适用于个人
  10. plsql导入导出表
  11. UVA 11584 Paritioning by Palindromes(动态规划 回文)
  12. (转载)HTML--- input type=hidden
  13. Codeforces 196 C. Paint Tree
  14. 【翻译】创建Cordova项目
  15. 理解C++ lvalue与rvalue
  16. vue typescript ui库
  17. Python开发工程师技术手记
  18. Linux 高级文件管理
  19. [Algorithm] Circular buffer
  20. 对 Kotlin 与 Java 编程语言的思考

热门文章

  1. 使用shell脚本删除30天以前的文件
  2. 查看python版本多少位的
  3. 利用PyInstaller打包exe文件
  4. 对《Java核心技术卷一》读者的一些建议
  5. Redux学习及应用
  6. C#封装继承
  7. Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1)
  8. cURL无法访问TLS网站故障解决
  9. 十一、Powell算法(鲍威尔算法)原理以及实现
  10. Drawable.SetDither(Boolean) Method