You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kratos/contrib/config/nacos/watcher.go

66 lines
1.3 KiB

package config
import (
"context"
"path/filepath"
"strings"
"github.com/go-kratos/kratos/v2/config"
"github.com/nacos-group/nacos-sdk-go/vo"
)
type Watcher struct {
dataID string
group string
content chan string
cancelListenConfig cancelListenConfigFunc
ctx context.Context
cancel context.CancelFunc
}
type cancelListenConfigFunc func(params vo.ConfigParam) (err error)
func newWatcher(ctx context.Context, dataID string, group string, cancelListenConfig cancelListenConfigFunc) *Watcher {
ctx, cancel := context.WithCancel(ctx)
w := &Watcher{
dataID: dataID,
group: group,
cancelListenConfig: cancelListenConfig,
content: make(chan string, 100),
ctx: ctx,
cancel: cancel,
}
return w
}
func (w *Watcher) Next() ([]*config.KeyValue, error) {
select {
case <-w.ctx.Done():
return nil, w.ctx.Err()
case content := <-w.content:
k := w.dataID
return []*config.KeyValue{
{
Key: k,
Value: []byte(content),
Format: strings.TrimPrefix(filepath.Ext(k), "."),
},
}, nil
}
}
func (w *Watcher) Close() error {
err := w.cancelListenConfig(vo.ConfigParam{
DataId: w.dataID,
Group: w.group,
})
w.cancel()
return err
}
func (w *Watcher) Stop() error {
return w.Close()
}