.NET Core结合Nacos来配置管理

15 篇文章 0 订阅
1 篇文章 0 订阅

前言

        去年项目组进行.Net Core3.1的项目重构之后,项目被拆分成了很多个微服务,每一个项目都是独立运行的,于是每一个项目都有很多的配置文件,这其中就不乏有些配置其实是相同的;但是在不同项目里面,配置要改,就得每一个项目去修改,非常的繁琐,于是乎就调研了一下Nacos。

Nacos的简介 

        Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。

      这里我们仅用到了Nacos的配置功能, 动态修改配置并实时生效,这能够让我们的服务拥有更多的灵活性,不需要重启服务即可做到配置实时生效,非常适合于“配置优先”的服务开发。

 Nacos gitHub:https://github.com/alibaba/nacos
 Nocos 文档   :https://nacos.io/zh-cn/docs/what-is-nacos.html

使用 

这里就不再赘述 Nacos的部署和使用了,直接上项目,如何和.Net Core结合,实现动态配置

一、在项目中应用NuGet包

nacos-sdk-csharp-unofficial

nacos-sdk-csharp-unofficial.Extensions.Configuration

二、在环境变量中配置Nacos的相关配置

        1、你可以右键项目->属性->调试->环境变量   里面配置

        2、也可以选择在项目Properties文件夹下的launchSettings.json配置文件的environmentVariables中添加

配置参数解释:

NACOSBASE_SERVERADDRESS:        Nacos服务的地址
NACOSBASE_DEFAULTTIMEOUT:         默认超时时间
NACOSBASE_NAMESPACE:                   Nacos命名空间
NACOSBASE_USERNAME:                      用户名
NACOSBASE_PASSWORD:                     密码

三、配置文件中添加你要监听的配置列表

{
  // 配置中心
  "NacosConfig": {    
    // 监听配置
    "Listener": {
      "Listeners": [
        {
          "Group": "DATABASE_GROUP",
          "DataId": "DatabaseConfig" //数据库配置
        },
        {
          "Group": "CACHE_GROUP",
          "DataId": "CacheConfig" //缓存配置
        },
        {
          "Group": "SERVICE_GROUP",
          "DataId": "TestServiceConfig" //本服务应用配置
        }
      ]
    }
  }
}

四、添加Nacos配置

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                 .ConfigureAppConfiguration((context, configBuilder) =>
                 {
                     var configuration = configBuilder.Build();
                     // 启用环境变量
                     configBuilder.AddEnvironmentVariables();
                     configBuilder.AddNacosConfiguration(configure =>
                     {
                         // 基础连接配置
                         configure.ServerAddresses = new List<string>() { Environment.GetEnvironmentVariable("NACOSBASE_SERVERADDRESS").ToString() };
                         configure.DefaultTimeOut = Convert.ToInt32(Environment.GetEnvironmentVariable("NACOSBASE_DEFAULTTIMEOUT").ToString());
                         configure.Tenant = Environment.GetEnvironmentVariable("NACOSBASE_NAMESPACE").ToString();
                         configure.UserName = Environment.GetEnvironmentVariable("NACOSBASE_USERNAME").ToString();
                         configure.Password = Environment.GetEnvironmentVariable("NACOSBASE_PASSWORD").ToString();
                         // 监听配置
                         var listenerList = configuration.GetSection("NacosConfig:Listener:Listeners").Get<List<ConfigListener>>();                        
                         configure.Listeners = listenerList;
                     });
                 })
                .ConfigureWebHostDefaults(webBuilder =>
                {

                    webBuilder.UseStartup<Startup>();
                });

    }

五、添加配置项对应的实体

public class AccountOptions : IOptions<AccountOptions>
{
    public AccountOptions Value => this;
}
public class IMSettingsOptions : IOptions<IMSettingsOptions>
{
    public IMSettingsOptions Value => this;
}

六、绑定配置实例

public void ConfigureServices(IServiceCollection services)
{
    // 业务配置项
    services.Configure<AccountOptions>(Configuration.GetSection("Account"));
    services.Configure<IMSettingsOptions>(Configuration.GetSection("IMSettings"));
    services.AddControllers();
}

七、使用

public class WeatherForecastController : ControllerBase
{
    private readonly AccountOptions _accountOptions;
    public WeatherForecastController(IOptions<AccountOptions> accountOptions)
    {
        _accountOptions = accountOptions.Value ?? throw new Exception($"未获取到配置");
    }
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡老汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值