zoukankan      html  css  js  c++  java
  • 在线配置热加载配置 go-kratos.dev 监听key 通过atomic.Value支持自动热加载

    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()
    }
  • 相关阅读:
    Python综合学习 python入门学习 python速成
    博客建设
    文献搜索方法
    Mac效率工具集合
    Mac High Sierra 三步搞定安装Eclipes
    Mac High Sierra一步搞定Mysql安装
    Mac中使用的建模工具/流程图制作
    R语言的安装以及入门
    (一)linux基本的操作命令
    小程序canvas简单电子签名
  • 原文地址:https://www.cnblogs.com/rsapaper/p/13957534.html
Copyright © 2011-2022 走看看