• .NET Core Nacos 配置中心


    Nacos 是阿里巴巴推出来的一个项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
    Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

    1、管理 NuGet 包(N)...

    nacos-sdk-csharp.Extensions.Configuration

    2、appsettings.json

    1. {
    2. "Logging": {
    3. "LogLevel": {
    4. "Default": "Information",
    5. "Microsoft": "Warning",
    6. "Microsoft.Hosting.Lifetime": "Information"
    7. }
    8. },
    9. "AllowedHosts": "*",
    10. "Nacos": {
    11. "Listeners": [
    12. {
    13. "Optional": false,
    14. "DataId": "test",
    15. "Group": "DEFAULT_GROUP"
    16. }
    17. ],
    18. "Namespace": "public", //命名空间 Namespace 名称
    19. "ServerAddresses": [ "http://localhost:8848" ],
    20. "UserName": "nacos",
    21. "Password": "nacos",
    22. "AccessKey": "",
    23. "SecretKey": "",
    24. "ConfigUseRpc": false,
    25. "NamingUseRpc": false
    26. }
    27. }

    ConfigUseRpc 和 NamingUseRpc 这2个参数必须存在
    若用的是http协议,则都是false,
    若用的是grpc协议,则都是true;

    3、Nacos 新建配置

    4、命名空间(Namespace),Data Id,Group

    5、Program.cs

    1. using Microsoft.AspNetCore.Hosting;
    2. using Microsoft.Extensions.Configuration;
    3. using Microsoft.Extensions.Hosting;
    4. namespace NacosProject
    5. {
    6. public class Program
    7. {
    8. public static void Main(string[] args)
    9. {
    10. CreateHostBuilder(args).Build().Run();
    11. }
    12. public static IHostBuilder CreateHostBuilder(string[] args) =>
    13. Host.CreateDefaultBuilder(args)
    14. .ConfigureAppConfiguration((context, builder) =>
    15. {
    16. var config = builder.Build();
    17. builder.AddNacosV2Configuration(config.GetSection("Nacos"));
    18. })
    19. .ConfigureWebHostDefaults(webBuilder =>
    20. {
    21. webBuilder.UseStartup();
    22. });
    23. }
    24. }

    6、Startup.cs

    1. using Microsoft.AspNetCore.Builder;
    2. using Microsoft.AspNetCore.Hosting;
    3. using Microsoft.Extensions.Configuration;
    4. using Microsoft.Extensions.DependencyInjection;
    5. using Microsoft.Extensions.Hosting;
    6. namespace NacosProject
    7. {
    8. public class Startup
    9. {
    10. public Startup(IConfiguration configuration)
    11. {
    12. Configuration = configuration;
    13. }
    14. public IConfiguration Configuration { get; }
    15. // This method gets called by the runtime. Use this method to add services to the container.
    16. public void ConfigureServices(IServiceCollection services)
    17. {
    18. services.Configure(Configuration.GetSection("AppSettings"));
    19. services.AddControllers();
    20. }
    21. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    22. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    23. {
    24. if (env.IsDevelopment())
    25. {
    26. app.UseDeveloperExceptionPage();
    27. }
    28. app.UseRouting();
    29. app.UseAuthorization();
    30. app.UseEndpoints(endpoints =>
    31. {
    32. endpoints.MapControllers();
    33. });
    34. }
    35. }
    36. }

    7、AppSettings.cs

    1. namespace NacosProject
    2. {
    3. public class AppSettings
    4. {
    5. public string Str { get; set; }
    6. public int num { get; set; }
    7. }
    8. }

    8、ValuesController.cs
    之所以 IOptions 没有获取到最新的配置,那是因为它的默认实现不会进行更新操作,也就是从启动到结束,它都是不会变的。
    在有配置变更的情景,请尽可能不要用IOptions,用 IOptionsSnapshot 和 IOptionsMonitor 来替代!

    1. using Microsoft.AspNetCore.Mvc;
    2. using Microsoft.Extensions.Configuration;
    3. using Microsoft.Extensions.Options;
    4. namespace NacosProject.Controllers
    5. {
    6. [Route("api/[controller]")]
    7. [ApiController]
    8. public class ValuesController : ControllerBase
    9. {
    10. private readonly IConfiguration _configuration;
    11. private readonly AppSettings _settings;
    12. private readonly AppSettings _sSettings;
    13. private readonly AppSettings _mSettings;
    14. public ValuesController(IConfiguration configuration, IOptions options, IOptionsSnapshot sOptions, IOptionsMonitor _mOptions)
    15. {
    16. _configuration = configuration;
    17. _settings = options.Value;
    18. _sSettings = sOptions.Value;
    19. _mSettings = _mOptions.CurrentValue;
    20. }
    21. [HttpGet]
    22. public IActionResult Get()
    23. {
    24. var connection = _configuration.GetConnectionString("Default");
    25. var version = _configuration["version"];
    26. var str1 = Newtonsoft.Json.JsonConvert.SerializeObject(_settings);
    27. var str2 = Newtonsoft.Json.JsonConvert.SerializeObject(_sSettings);
    28. var str3 = Newtonsoft.Json.JsonConvert.SerializeObject(_mSettings);
    29. return Ok(new
    30. {
    31. connection = connection,
    32. version = version,
    33. str1 = str1,
    34. str2 = str2,
    35. str3 = str3
    36. });
    37. }
    38. }
    39. }

    9、浏览器
    地址栏输入:http://localhost:6546/api/values

    *
    *
    *

  • 相关阅读:
    HDU1276:士兵队列训练问题 ← STL queue
    git push 新分支出现remote unpack failed: error Missing blob报错可能原因之一
    前端JS基础第三篇:七道例题带你弄懂this指向问题
    ubuntu18.04安装qgis、pyqgis
    Promise从入门到精通 (第一章 Promise的介绍和基本使用)
    Kubernetes (k8s) 管理工具 kubectl 命令详解
    软件测试04:软件测试流程和软件测试过程
    Python与数据分析--Pandas操作进阶
    springboot基于spring的宽带管理系统以及实现毕业设计源码250910
    关于原型交互设计文档的一些建议
  • 原文地址:https://blog.csdn.net/KingCruel/article/details/127427045