Kratos配置Apollo的踩坑笔记
前言
首先按照官方文档进行配置,地址:https://github.com/go-kratos/kratos/tree/main/contrib/config/apollo
目标配置类型
笔者使用Apollo时一直是使用Properties格式

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才能实现。

显然通过上述方式能实现目标,但是不够优雅。此时可以使用yaml、json等配置方式。
在Apollo上添加NameSpace但是这里需要注意创建类型需要是private才能选择类型,public默认只能是properties。

需要注意的是在使用非properties的配置类型时需要在namespace后加上文件后缀。
对应不同的配置类型时namespace的填写方式:
properties: xxxyaml: xxx.yamljson: xxx.json
# 在新版本中kratos适配了properties文件,使用json、yaml、yml配置时需要加入配置`apollo.WithOriginalConfig()`

浙公网安备 33010602011771号