zoukankan      html  css  js  c++  java
  • 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();
            }

    运行结果:

    更新后也会刷新

    windows技术爱好者
  • 相关阅读:
    333333
    钢镚儿冲刺一周期第六天
    钢镚儿冲刺一周期第五天
    钢镚儿冲刺一周期第四天
    钢镚儿冲刺一周期第三天
    钢镚儿冲刺一周期第二天
    钢镚儿冲刺一周期第一天
    软件工程第九周总结
    CVPR论文的爬取
    构建之法读后感第五
  • 原文地址:https://www.cnblogs.com/majiang/p/14379335.html
Copyright © 2011-2022 走看看