go 获取 consul 的配置信息

之前向 consul 创建微服务,调用微服务成功。这里就 用 consul 做配置 中心,从 consul 读取配置

consul 配置

  1. http://0.0.0.0:8500 访问 consul
  2. 点击 Key/Value 配置
    在这里插入图片描述点击 Create 按钮创建 Key/Value 配置
  3. name/ 创建目录,name 创建 Key/Value 键值对
    在这里插入图片描述

golang 读取配置

加载 consul 配置中心

package consul

import (
	"github.com/micro/go-micro/v2/config"
	"github.com/micro/go-plugins/config/source/consul/v2"
)

var consulConfigList map[string]interface{}

// 加载 consul 配置
func LoadConsulConfig(address, prefix string) (config.Config, error) {
 	//添加配置中心
    //配置中心使用consul key/value 模式
    consulSource := consul.NewSource(
        //设置配置中心地址
        consul.WithAddress(address),
        //设置前缀,不设置默认为 /micro/config
        consul.WithPrefix(prefix),
        //是否移除前缀,这里设置为true 表示可以不带前缀直接获取对应配置
        consul.StripPrefix(true),
    )
    //配置初始化
    conf, err := config.NewConfig()
    if err != nil {
        return conf, err
    }
    //加载配置
    err = conf.Load(consulSource)

	return conf, nil
}

// ...string 用做参数
// ... 参数语法形成了可变参数的参数。它将接受零个或多个参数,并将它们作为切⽚引⽤
func GetConsulConfig(config config.Config, configStruct interface{}, key ...string) error {
    //获取配置
    err := config.Get(key...).Scan(configStruct)
    if err != nil {
        return err
    }
    return nil
}

下面以 mysql 配置为例 读取配置信息

package consul

import (
	"fmt"
)

// MysqlConfig 创建结构体
type MysqlConfig struct {
    Host     string `json:"host"`
    User     string `json:"user"`
    Pwd      string `json:"pwd"`
    Database string `json:"database"`
    Port     int64  `json:"port"`
}

func Demo(){
	// 加载 consul 配置
	config, err := LoadConsulConfig("127.0.0.1:8500", "")
	if err != nil {
		fmt.Println("加载 consul 配置, err:", err)
		return
	}

	mysqlConfig := &MysqlConfig{}

	// 获取 MySQL 配置
	err = GetConsulConfig(config, &mysqlConfig, "mysql")
	if err != nil {
		fmt.Println("获取 MySQL 配置, err:", err)
		return
	}

	fmt.Println(mysqlConfig)
}

//设置前缀,不设置默认为 /micro/config
consul.WithPrefix(prefix),
//是否移除前缀,这里设置为true 表示可以不带前缀直接获取对应配置
consul.StripPrefix(true),
这里 prefix 传空,读取的配置是 根目录 的 Key/Value 配置信息