51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 852|回复: 0
打印 上一主题 下一主题

[原创] ore结合Nacos来配置管理之.NET

[复制链接]
  • TA的每日心情
    擦汗
    昨天 08:52
  • 签到天数: 949 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-2-10 11:12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     前言
      去年项目组进行.Net Core3.1的项目重构之后,项目被拆分成了很多个微服务,每一个项目都是独立运行的,于是每一个项目都有很多的配置文件,这其中就不乏有些配置其实是相同的;但是在不同项目里面,配置要改,就得每一个项目去修改,非常的繁琐,于是乎就调研了一下Nacos。

      Nacos的简介
      Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
      这里我们仅用到了Nacos的配置功能, 动态修改配置并实时生效,这能够让我们的服务拥有更多的灵活性,不需要重启服务即可做到配置实时生效,非常适合于“配置优先”的服务开发。
    1. Nacos gitHub:https://github.com/alibaba/nacos
    2.   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("NacosConfigisteneristeners").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($"未获取到配置");
          }
      }







    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-18 08:29 , Processed in 0.064320 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表