go 获取 consul 的配置信息
之前向 consul 创建微服务,调用微服务成功。这里就 用 consul 做配置 中心,从 consul 读取配置
consul 配置
- http://0.0.0.0:8500 访问 consul
- 点击 Key/Value 配置
点击 Create 按钮创建 Key/Value 配置
- 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 配置信息