Table of Contents generated with DocToc
1 动态加载:根据需要动态加载多个资源文件。 go config 在后台管理并监控配置文件,并自动更新到内存中
2 资源可插拔: 从任意数量的源中进行选择以加载和合并配置。后台资源源被抽象为内部使用的标准格式,并通过编码器进行解码。源可以是环境变量,标志,文件,etcd,k8s configmap等
3 可合并的配置:如果指定了多种配置,它们会合并到一个视图中。
4 监控变化:可以选择是否监控配置的指定值,热重启
5 安全恢复: 万一配置加载错误或者由于未知原因而清除,可以指定回退值进行回退
- cli 命令行
- consul
- env
- etcd
- file
- flag
- memory
也有一些社区支持的插件:
- configmap - nread from k8s configmap
- grpc - read from grpc server
- runtimevar - read from Go Cloud Development Kit runtime variable
- url - read from URL
- vault - read from Vault server
Source返回ChangeSet,是多个后端的单例内部抽象
// ChangeSet represents a set of changes from a source
type ChangeSet struct {
// Raw encoded config data
Data []byte
// MD5 checksum of the data
Checksum string
// Encoding format e.g json, yaml, toml, xml
Format string
// Source of the config e.g file, consul, etcd
Source string
// Time of loading or update
Timestamp time.Time
}
json
yaml
toml
xml
xml
hcl
Go-Micro默认的解析器是json
它扮演的是一种管理者的角色,它负责配置的新建、配置的读取、配置的同步、配置的监听等功能
// Config is an interface abstraction for dynamic configuration
type Config interface {
// provide the reader.Values interface
reader.Values
// Stop the config loader/watcher
Close() error
// Load config sources
Load(source ...source.Source) error
// Force a source changeset sync
Sync() error
// Watch a value for changes
Watch(path ...string) (Watcher, error)
}
它的作用是将多个源的配置合并为一个。因为对于json、yaml、或者是consul,其配置结构都是类似的,最终Go-Micro都会将其转换成map[string]interface{}形式,并进行合并