.NET Core结合Nacos来配置管理

发表于:2023-2-10 09:41

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:胡老汉    来源:CSDN

  前言
  去年项目组进行.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($"未获取到配置");
      }
  }
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号