- Multiple namespace support
- Fail tolerant
- Realtime change notification
- Unmarshal
go 1.9 or later
go get -u github.com/philchia/agollo
agollo.Start()
agollo.StartWithConfFile(name)
agollo.StartWithConf(yourConf)
events := agollo.WatchUpdate()
changeEvent := <-events
bytes, _ := json.Marshal(changeEvent)
fmt.Println("event:", string(bytes))
agollo.OnConfigChange(func(e *agollo.ChangeEvent) {
bytes, _ := json.Marshal(e)
fmt.Println("event:", string(bytes))
})
// default namespace: application
agollo.GetStringValue(Key, defaultValue)
// user specify namespace
agollo.GetStringValueWithNameSpace(namespace, key, defaultValue)
agollo.GetNameSpaceContent(namespace, defaultValue)
agollo.GetAllKeys(namespace)
There is a config in apollo like this:
So our meta-config should like:
{
"appId": "001",
"cluster": "default",
"namespaceNames": ["application","dnspod1","dnspod2.yaml","db"],
"ip": "localhost:8080"
}
At last, we make a structure to get all the config
package main
import (
"fmt"
"log"
"github.com/philchia/agollo"
)
type config struct {
// dns
DNS1 struct {
ID string `mapstructure:"id"`
Token string `mapstructure:"token"`
Domain string `mapstructure:"domain"`
} `mapstructure:"dnspod1"`
DNS2 struct {
ID int `mapstructure:"id"`
Token string `mapstructure:"token"`
Domain string `mapstructure:"domain"`
} `mapstructure:"dnspod2.yaml"`
// DB
DB struct {
DSN string `mapstructure:"dsn"`
MaxConn string `mapstructure:"max_conn"`
} `mapstructure:"db"`
}
func main(){
agollo.Start()
// first
var c config
agollo.Unmarshal(&c)
fmt.Printf("%v", c)
// watch
agollo.OnConfigChange(func(e *agollo.ChangeEvent) {
var c config
agollo.Unmarshal(&c)
fmt.Println(c)
})
}