当前位置:   article > 正文

.NET Core结合Nacos来配置管理_netcore nacos

netcore nacos

前言

        去年项目组进行.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:                     密码

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

  1. {
  2. // 配置中心
  3. "NacosConfig": {
  4. // 监听配置
  5. "Listener": {
  6. "Listeners": [
  7. {
  8. "Group": "DATABASE_GROUP",
  9. "DataId": "DatabaseConfig" //数据库配置
  10. },
  11. {
  12. "Group": "CACHE_GROUP",
  13. "DataId": "CacheConfig" //缓存配置
  14. },
  15. {
  16. "Group": "SERVICE_GROUP",
  17. "DataId": "TestServiceConfig" //本服务应用配置
  18. }
  19. ]
  20. }
  21. }
  22. }

四、添加Nacos配置

  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. CreateHostBuilder(args).Build().Run();
  6. }
  7. public static IHostBuilder CreateHostBuilder(string[] args) =>
  8. Host.CreateDefaultBuilder(args)
  9. .ConfigureAppConfiguration((context, configBuilder) =>
  10. {
  11. var configuration = configBuilder.Build();
  12. // 启用环境变量
  13. configBuilder.AddEnvironmentVariables();
  14. configBuilder.AddNacosConfiguration(configure =>
  15. {
  16. // 基础连接配置
  17. configure.ServerAddresses = new List<string>() { Environment.GetEnvironmentVariable("NACOSBASE_SERVERADDRESS").ToString() };
  18. configure.DefaultTimeOut = Convert.ToInt32(Environment.GetEnvironmentVariable("NACOSBASE_DEFAULTTIMEOUT").ToString());
  19. configure.Tenant = Environment.GetEnvironmentVariable("NACOSBASE_NAMESPACE").ToString();
  20. configure.UserName = Environment.GetEnvironmentVariable("NACOSBASE_USERNAME").ToString();
  21. configure.Password = Environment.GetEnvironmentVariable("NACOSBASE_PASSWORD").ToString();
  22. // 监听配置
  23. var listenerList = configuration.GetSection("NacosConfig:Listener:Listeners").Get<List<ConfigListener>>();
  24. configure.Listeners = listenerList;
  25. });
  26. })
  27. .ConfigureWebHostDefaults(webBuilder =>
  28. {
  29. webBuilder.UseStartup<Startup>();
  30. });
  31. }

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

  1. public class AccountOptions : IOptions<AccountOptions>
  2. {
  3. public AccountOptions Value => this;
  4. }
  5. public class IMSettingsOptions : IOptions<IMSettingsOptions>
  6. {
  7. public IMSettingsOptions Value => this;
  8. }

六、绑定配置实例

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

七、使用

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/876391
推荐阅读
相关标签
  

闽ICP备14008679号