go和asp.netCore讀取nacos配置


上文docker安裝nacos我們已經安裝了nacos,現在我們來看看如何讀取配置文件。我們的nacos的示例采用和 go讀取consul配置文件 一致:

 

go

我這里采用 https://github.com/nacos-group/nacos-sdk-go 客戶端, 直接上上代碼:

package main

import (
    "fmt"
    "log"
    "strings"
    "time"

    "github.com/nacos-group/nacos-sdk-go/clients"
    "github.com/nacos-group/nacos-sdk-go/common/constant"
    "github.com/nacos-group/nacos-sdk-go/vo"
    "github.com/spf13/viper"
)

var (
    defaultConfig *viper.Viper
    nacosIp       string
    nacosPort     uint64
    nacosDataId   string
    nacosGroup    string
)

func initConfig() *viper.Viper {
    nacosIp = "192.168.100.21"
    nacosPort = 8848
    nacosDataId = "dev001"
    nacosGroup = "go"

    defaultConfig = viper.New()
    defaultConfig.SetConfigType("yaml")
    //配置模型
    serverConfigs := []constant.ServerConfig{
        {IpAddr: nacosIp, Port: nacosPort},
    }

    //客戶端
    nacosClient, err := clients.NewConfigClient(
        vo.NacosClientParam{
            ClientConfig:  &constant.ClientConfig{TimeoutMs: 5000},
            ServerConfigs: serverConfigs,
        },
    )
    if err != nil {
        log.Fatal("nacos初始化錯誤:", err)
    }

    content, err := nacosClient.GetConfig(vo.ConfigParam{DataId: nacosDataId, Group: nacosGroup})
    if err != nil {
        log.Fatalln("nacos讀取配置錯誤:" + content)
    }

    err = defaultConfig.ReadConfig(strings.NewReader(content))
    if err != nil {
        log.Fatalln("Viper解析配置失敗:", err)
    }

        err = nacosClient.ListenConfig(vo.ConfigParam{
            DataId: nacosDataId,
            Group:  nacosGroup,
            OnChange: func(namespace, group, dataId, data string) {
                fmt.Println("config changed group:" + group + ", dataId:" + dataId + ", content:" + data)
                err = defaultConfig.ReadConfig(strings.NewReader(data))
                if err != nil {
                    log.Fatalln("Viper解析配置失敗:", err)
                }
            },
        })

    return defaultConfig
}

func GetConfig() *viper.Viper {
    if defaultConfig == nil {
        defaultConfig = initConfig()
    }
    return defaultConfig
}

func main() {
    for {
        host := GetConfig().GetString("store.bicycle.color")
        fmt.Println("consul===", host)
        time.Sleep(time.Second * 10)
    }
}

運行效果:

 asp.netcore

我們把配置文件改為json格式,並創建配置對象

 

 

    public class MongodbHostOptions
    {
        public string Connection { get; set; }
        public string DataBase { get; set; }

        public string Table { get; set; }
    }

我們采用https://github.com/nacos-group/nacos-sdk-csharp 這個包添加引用:

dotnet add package nacos-sdk-csharp-unofficial
dotnet add package nacos-sdk-csharp-unofficial.AspNetCore
dotnet add package nacos-sdk-csharp-unofficial.Extensions.Configuration
dotnet add package nacos-sdk-csharp-unofficial.YamlParser
dotnet add package nacos-sdk-csharp-unofficial.IniParser

修改Program.cs

  public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, builder) =>
        {
            var c = builder.Build();
            builder.AddNacosConfiguration(c.GetSection("NacosConfig"));
            // builder.AddNacosConfiguration(c.GetSection("NacosConfig"), Nacos.IniParser.IniConfigurationStringParser.Instance);
  
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

修改Startup.cs

       public void ConfigureServices(IServiceCollection services)
        {
            services.AddNacos(Configuration);
            services.Configure<MongodbHostOptions>(Configuration.GetSection("MongodbHost"));
            services.AddControllers();
        }

修改使用的地方WeatherForecastController.cs

 private readonly ILogger<WeatherForecastController> _logger;
        MongodbHostOptions _options;
        public WeatherForecastController(IOptionsSnapshot<MongodbHostOptions> options, ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
            _options = options.Value;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)] + _options.Connection
            })
            .ToArray();
        }

運行結果:

 

更新后也會刷新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM