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();
        }
复制代码

运行结果:

 

更新后也会刷新

 

posted on   dz45693  阅读(2402)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示