赞
踩
去年项目组进行.Net Core3.1的项目重构之后,项目被拆分成了很多个微服务,每一个项目都是独立运行的,于是每一个项目都有很多的配置文件,这其中就不乏有些配置其实是相同的;但是在不同项目里面,配置要改,就得每一个项目去修改,非常的繁琐,于是乎就调研了一下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($"未获取到配置");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。