请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于consul

老师你好,我照着你的代码写了一遍,代码的意思就是从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配置,发现为空,获取不了,这么是什么情况呢?

正在回答 回答被采纳积分+3

1回答

Cap 2022-12-21 15:27:01

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕瓜9063200 #1
    我登陆了127.0.0.1:8500,是能看到对应的配置的,/micro/config/mysql
    json串为:
    {
      "host": "127.0.0.1",
      "user": "root",
      "pwd": "123456",
      "database": "db3",
      "port": 3306
    }
    回复 有任何疑惑可以回复我~ 2022-12-21 15:43:25
  • 提问者 慕瓜9063200 #2
    正常来说我们从consul读取到的配置应该是存在mysqlInfo中,然后我试着打印了mysqlInfo,发现没有数据
    回复 有任何疑惑可以回复我~ 2022-12-21 15:45:31
  • Cap 回复 提问者 慕瓜9063200 #3
    common.GetConsulConfig 这个包是用成了课程里面的包了么?上面的方法是在一个文件里面的话把 common.GetConsulConfig 要去掉 common 。
    回复 有任何疑惑可以回复我~ 2022-12-26 15:57:03

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信