Tích hợp Nacos với .NET Core và Ocelot

Cài đặt từ nuget:

nacos-sdk-csharp.Extensions.Configuration

Để cài đặt Nacos thông qua Docker, lưu ý rằng các phiên bản mới mở thêm cổng 9848 và 9849 cho giao tiếp GRPC:

docker run --name nacos \
-e MODE=standalone \
-p 8848:8848 -d \
-p 9848:9848 \
-p 9849:9849 \
--restart always nacos/nacos-server:latest 

Truy cập giao diện Nacos tại:

http://192.168.0.196:8848/

Cấu hình trong Nacos:

  "nacos": {
    "ServerAddresses": [ "http://192.168.0.196:8848" ],
    "DefaultTimeOut": 15000,
    "Namespace": "OrderService",
    "ListenInterval": 1500,
    "ServiceName": "OrderService",
    "GroupName": "DEFAULT_GROUP",
    "ClusterName": "DEFAULT",
    "RegisterEnabled": true,
    "InstanceEnabled": true,
    "ConfigUseRpc": true,
    "NamingUseRpc": true,
    "Ephemeral": true,
    "LBStrategy": "WeightRoundRobin"
  },

Cấu hình .NET Core để đọc cấu hình từ Nacos:

Trong file appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "NacosSettings": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "OrderService",
        "Group": "DEFAULT_GROUP"
      }
    ],
    "Optional": false,
    "Tenant": "fa6bd7e2-ff16-4faf-b0f6-c6a3e0c509fa",
    "ServerAddresses": [ "http://192.168.0.196:8848/" ]
  }
}

Kích hoạt Nacos trong lớp khởi tạo ứng dụng:

namespace ServiceAPI
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, builder) =>
                {
                    builder.AddCustomNacos();
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

Mở rộng Nacos:

using Microsoft.Extensions.Configuration;

namespace Microsoft.Extensions.Configuration
{
    public static class NacosExtension
    {
        public static void AddCustomNacos(this IConfigurationBuilder builder, string configKey = "NacosSettings")
        {
            builder.AddNacosV2Configuration(builder.Build().GetSection(configKey));
        }
    }
}

Đọc cấu hình từ Nacos:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace ServiceAPI
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            
            var configValue = Configuration.GetSection("version").Value;
            var loggerFactory = services.BuildServiceProvider().GetService<ILoggerFactory>();
            var logger = loggerFactory.CreateLogger<Startup>();
            logger.LogInformation($"Giá trị từ Nacos: {configValue}");
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

Thẻ: .net core Nacos ocelot Configuration Management

Đăng vào ngày 27 tháng 6 lúc 18:19