• Go微服务框架gokratos实战学习06:配置使用file和nacos配置中心


    一、kratos 配置介绍

    配置文件的作用就是把一些会变化的配置项单独存放,与程序相剥离。

    把配置项进行单独管理。

    kratos 支持多种形式的配置,

    比如 file,环境变量。

    还支持一些配置软件,比如:

    等等。

    它也支持多种格式,比如 json、yaml、proto、xml 等。

    katos 还支持热更新功能

    kratos 中的 config 热更新功能,可以在服务不重新发布、不停机、不重启情况下,在线更新服务配置,修改服务行为。

    二、基本使用步骤

    go-kratos: v2.4.0

    Go: v1.17.10

    基本使用步骤

    1. 初始化配置源:解析的配置项数据源来自 file,还是配置软件里存储的数据。
    2. 读取配置值

    例子1:配置源是 file

    文档:https://go-kratos.dev/docs/component/config/#1初始化配置源

    第一步,初始化配置源。

    import (
    	"github.com/go-kratos/kratos/v2/config"
    	"github.com/go-kratos/kratos/v2/config/file"
    )
    
    path := "./config.yaml"
    
    c := config.New(
        config.WithSource( // 初始化配置源
            file.NewSource(path),
        ),
    )
    

    第二步,读取配置值

    path := "./config.yaml"
    
    c := config.New(
        config.WithSource( // 初始化配置
            file.NewSource(path),
        ),
    )
    
    if err := c.Load(); err != nil { //加载配置
        panic(err)
    }
    
    // 定义读取配置文件的结构
    var v struct {
        Service struct {
            Name    string `json:"name"`
            Version string `json:"version"`
        } `json:"service"`
    }
    
    if err := c.Scan(&v); err != nil { // 读取配置到结构体
        panic(err)
    }
    log.Printf("config: %+v", v)
    
    // 获取值
    name, err := c.Value("service.name").String()
    if err != nil {
        panic(err)
    }
    log.Printf("service: %s", name)
    

    上面的配置文件 config.yaml

    service:
      name: config
      version: v1.0.0
    http:
      server: 
        address: 0.0.0.0:8000
        timeout: 1s
    grpc:
      server:
        address: 0.0.0.0:9000
        timeout: 1s
    

    例子2:配置源是配置中心-nacos

    nacos 文档

    比如使用 nacos

    nacos 文档上介绍的功能:

    Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    nacos 的安装这里就不介绍了,请查看安装文档

    nacos 安装

    我直接在 github 上下载的 win 安装版本:https://github.com/alibaba/nacos/releases/download/2.1.0/nacos-server-2.1.0.zip。解压后直接到nacos的bin目录,执行命令 startup.cmd -m standalone,就会启动 nacos。

    运行nacos前,还有一些预备环境,可以到Nacos快速开始查看安装nacos的预备环境文档。

    执行启动命名:

    startup.cmd -m standalone

    image-20220720141840942

    上面图片已经显示了进入 console 的 url 地址。

    进入 console 界面:

    进入 console 界面:http://192.168.56.1:8848/nacos/index.html 默认用户名/密码:nacos/nacos。

    image-20220720142114428

    新建配置

    在上面console图片界面的右边有一个大大的 + 号,点击它转到新建配置页面,相关填写项如下图

    image-20220720142948035

    service:
      name: config
      version: v1.0.0
    http:
      server: 
        address: 0.0.0.0:8000
        timeout: 1s
    grpc:
      server:
        address: 0.0.0.0:9000
        timeout: 1s
    

    点击发布,如下图:

    image-20220720143231521

    编写读取配置代码

    nacos go-sdk:

    nacos 的 go-sdk 以及文档:https://github.com/nacos-group/nacos-sdk-go

    github.com/nacos-group/nacos-sdk-go v1.1.1

    获取 nacos 配置:

    package main
    
    import (
    	"log"
    
    	"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"
    
    	knacos "github.com/go-kratos/kratos/contrib/config/nacos/v2"
    
    	"github.com/go-kratos/kratos/v2/config"
    )
    
    func main() {
    	sc := []constant.ServerConfig{
    		*constant.NewServerConfig("127.0.0.1", 8848),
    	}
    
    	cc := &constant.ClientConfig{
    		NamespaceId:         "public",
    		TimeoutMs:           5000,
    		NotLoadCacheAtStart: true,
    		LogDir:              "./config/log",
    		CacheDir:            "./config/cache",
    		LogLevel:            "debug",
    	}
    
    	client, err := clients.NewConfigClient(
    		vo.NacosClientParam{
    			ClientConfig:  cc,
    			ServerConfigs: sc,
    		},
    	)
    	if err != nil {
    		log.Panic(err)
    	}
    
    	c := config.New(
    		config.WithSource(
    			knacos.NewConfigSource(
    				client,
    				knacos.WithGroup("defaulttest_group"),
    				knacos.WithDataID("defaulttest.yaml"),
    			),
    		),
    	)
    	if err := c.Load(); err != nil {
    		panic(err)
    	}
    	name, err := c.Value("service.name").String()
    	if err != nil {
    		panic(err)
    	}
    	log.Println("GET service.name: ", name)
    
    }
    

    运行:

    go run .\main.go
    2022-07-20T14:41:23.121+0800 INFO nacos_client/nacos_client.go:79 logDir:<./config/log> cacheDir:<./config/cache>
    DEBUG msg=config loaded: defaulttest.yaml format: yaml
    2022/07/20 14:41:23 GET service.name: config

    三、完整代码地址

    kratos 配置使用完整代码地址:

    https://github.com/jiujuan/go-kratos-demos/tree/master/config

    四、参考

  • 相关阅读:
    简单的MVC小应用
    jsp四大指令元素,三大脚本元素,八大动作元素
    servlet session管理的四种方式 --隐藏表单
    servlet session管理的四种方式--一 url重写
    创建servlet三种方式(韩顺平老师课程)
    python函数
    tcpprobe ——监听TCP信息的内核模块
    Popen的方法
    Python中执行系统命令常见的几种方法
    > /dev/null 2>&1 含义
  • 原文地址:https://www.cnblogs.com/jiujuan/p/16498072.html
Copyright © 2020-2023  润新知