Kratos配置Apollo的踩坑笔记

前言

首先按照官方文档进行配置,地址:https://github.com/go-kratos/kratos/tree/main/contrib/config/apollo

目标配置类型

笔者使用Apollo时一直是使用Properties格式
image
Kratos通过HTTP GETconfigfiles/json/ahago/default/{config}来获得配置信息。通过接口返回结果中的content字段加载配置信息。

func (e *apollo) load() []*config.KeyValue {
	kv := make([]*config.KeyValue, 0)
	namespaces := strings.Split(e.opt.namespace, ",")

	for _, ns := range namespaces {
		value, err := e.client.GetConfigCache(ns).Get("content")
		if err != nil {
			log.Warnw("apollo get config failed", "err", err)
		}
		// serialize the namespace content KeyValue into bytes.
		kv = append(kv, &config.KeyValue{
			Key:    ns,
			Value:  []byte(value.(string)),
			Format: format(ns),
		})
	}

	return kv
}

这里会出现一个问题,解析配置格式为properties时使通过Key-Value的方式直接返回,也就是需要在properties配置一个content字段再在其中配置一段JSON才能实现。

显然通过上述方式能实现目标,但是不够优雅。此时可以使用yamljson等配置方式。

在Apollo上添加NameSpace但是这里需要注意创建类型需要是private才能选择类型,public默认只能是properties

需要注意的是在使用非properties的配置类型时需要在namespace后加上文件后缀。

对应不同的配置类型时namespace的填写方式:

  • properties: xxx
  • yaml: xxx.yaml
  • json: xxx.json

# 在新版本中kratos适配了properties文件,使用json、yaml、yml配置时需要加入配置`apollo.WithOriginalConfig()`
posted @ 2022-08-19 10:28  T-Yihang  阅读(349)  评论(0)    收藏  举报