关于consul

来源:4-8 完善Consule配置

慕瓜9063200

2022-12-21

老师你好,我照着你的代码写了一遍,代码的意思就是从consul中获取mysql配置,

func GetConsulConfig(host string, port int64, prefix string) (config.Config, error) {
		source := consul.NewSource(
			consul.WithAddress(host+":"+strconv.FormatInt(port, 10)),
			consul.WithPrefix(prefix),
			consul.StripPrefix(true),
		)
		newConfig, err := config.NewConfig()
		if err != nil {
			return newConfig, err
		}
		err = config.Load(source)
		return newConfig, err
}

func GetMysqlFromConsul(config config.Config, path ...string) *MysqlConfig {
	mysqlConfig := &MysqlConfig{}
	config.Get(path...).Scan(mysqlConfig)
	return mysqlConfig
}

func main(){
	consulConfig, err := common.GetConsulConfig("127.0.0.1", 8500, "/micro/config")
	......
	mysqlInfo := common.GetMysqlFromConsul(consulConfig, "mysql")
	......
	fmt.Printf("Host:%s\nuser:%s\npassword:%s\ndatabase:%s\nport:%d\n", mysqlInfo.Host, mysqlInfo.User, mysqlInfo.Password, mysqlInfo.Database, mysqlInfo.Port)
}

output:
Host:
user:
password:
database:
port:0


然后我试着打印从consul获取到的mysql配置,发现为空,获取不了,这么是什么情况呢?

写回答

1回答

Cap

2022-12-21

首先你要看下consul里面有没有对应的配置,其次在确认下配置的值是不是标准的json格式,最后还是找不到问题的话把取出来的对象打印出来看有没有赋值。

0
3
Cap
回复
慕瓜9063200
common.GetConsulConfig 这个包是用成了课程里面的包了么?上面的方法是在一个文件里面的话把 common.GetConsulConfig 要去掉 common 。
2022-12-26
共3条回复

Go微服务入门到容器化实践,落地可观测微服务项目

这可能是你全面提升Go微服务能力的好机会

861 学习 · 322 问题

查看课程