paladin https://v1.go-kratos.dev/#/config-paladin
example Service(在线配置热加载配置)
# service.go
type Service struct {
ac *paladin.Map
}
func New() *Service {
// paladin.Map 通过atomic.Value支持自动热加载
var ac = new(paladin.TOML)
if err := paladin.Watch("application.toml", ac); err != nil {
panic(err)
}
s := &Service{
ac: ac,
}
return s
}
func (s *Service) Test() {
sw, err := s.ac.Get("switch").Bool()
if err != nil {
// TODO
}
// or use default value
sw := paladin.Bool(s.ac.Get("switch"), false)
}
// EventType is config event. type EventType int
// Event is watch event. type Event struct { Event EventType Key string Value string }
// Watcher is config watcher. type Watcher interface { WatchEvent(context.Context, ...string) <-chan Event Close() error }
// Watch watch on a key. The configuration implements the setter interface, which is invoked when the configuration changes. func Watch(key string, s Setter) error { v := DefaultClient.Get(key) str, err := v.Raw() if err != nil { return err } if err := s.Set(str); err != nil { return err } go func() { for event := range WatchEvent(context.Background(), key) { s.Set(event.Value) } }() return nil }
// WatchEvent watch on multi keys. Events are returned when the configuration changes. func WatchEvent(ctx context.Context, keys ...string) <-chan Event { return DefaultClient.WatchEvent(ctx, keys...) }
// Get return value by key. func Get(key string) *Value { return DefaultClient.Get(key) }
// GetAll return all config map. func GetAll() *Map { return DefaultClient.GetAll() }
// Keys return values key. func Keys() []string { return DefaultClient.GetAll().Keys() }
// Close close watcher. func Close() error { return DefaultClient.Close() }
|
请发表评论