基于Consul的key/value实现配置中心
第一次写微博,有点小紧张。。。。这两年微服务比较火,最近想自己弄弄微服务,目前dotnet core 还没有特别成熟的框架,实现微服务,首先要解决配置文件的问题。不管是不是使用微服务,节点多了,配置文件不可能一个一个的改,目前也有很多成熟的配置中心解决方案,比如携程的阿波罗,Consul官方也提供了Consul-Template,但是我想自己基于Consul实现一个比较轻量级配置中心方案,...
这两年微服务比较火,最近想自己弄弄微服务,目前dotnet core 还没有特别成熟的框架,实现微服务,首先要解决配置中心的问题。
不管是不是使用微服务,节点多了,配置文件不可能一个一个的改,目前也有很多成熟的配置中心解决方案,比如携程的阿波罗,Consul官方也提供了Consul-Template,但是我想自己基于Consul实现一个比较轻量级配置中心方案,要使用方便。
dotnet core 本身就提供了一套配置解决方案,https://github.com/aspnet/Configuration/tree/release/2.0/src,并且提供了抽象。关于donet core 配置系统,我在此也不做描述,推荐大家关注“大内老A”这个公众号,里面有关于这方面的文章,写得非常的详细。篇文章链接:
https://mp.weixin.qq.com/s/u6v0WYVSjk4wHoH14Nxw6Q
https://mp.weixin.qq.com/s/5MB0DQB2HAK02A6e6NjjkQ
https://mp.weixin.qq.com/s/vB7AdoA5AMDDktb8skvqlg
https://mp.weixin.qq.com/s/EjSHaa0JY8lbfARNuBkRnA
https://mp.weixin.qq.com/s/vpenPw8pjC_irnm47f048A
https://mp.weixin.qq.com/s/V7o5_GJpC8UZh_cwlDqEbA
https://mp.weixin.qq.com/s/4SE44lM-crzqH4nrDwkfLg
https://mp.weixin.qq.com/s/fUoaT-Ib4QSS05y3VA0HOQ
https://mp.weixin.qq.com/s/E2FBwOfIS9vl6--q9im6Hw
https://mp.weixin.qq.com/s/3Tg63kvHZjtuCGzEDdi3QQ
https://mp.weixin.qq.com/s/5Z7mX5JqJpu32mXmL19y0w
实现逻辑: 最关键的一个抽象类ConfigurationProvider,重写Load方法,监听consul,如果key/value被修改了就触发ReLoad方法。
源码:
https://github.com/ww198643/Extensions.Configuration.Consul
使用
配置
硬编码配置
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) =>
{
config.AddConsul("http://127.0.0.1:8500");
}).UseStartup<Startup>();
}
通过命令行配置
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) =>
{
config.AddConsul(args);
}).UseStartup<Startup>();
}
支持的命令
Command | Describetion |
---|---|
consul-configuration-addr | Consul agent address |
consul-configuration-token | ACL Token HTTP API |
consul-configuration-dc | Consul data center |
consul-configuration-folder | Prefix of key |
监听kv是否被修改,如果修改了就更新配置
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddConsulConfigurationCenter();
}
获取配置
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddConsulConfigurationCenter();
services.Configure<Configs>(Configuration.GetSection("TestConfig"));
}
public class TestClass
{
private Configs Config;
public TestClass(IOptionsSnapshot<Configs> config)
{
Config = config.Value;
}
}
更多推荐
所有评论(0)