1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-18 00:22:41 +08:00
Files
go-mixed/configure/nacos.go
2023-12-13 17:08:56 +08:00

97 lines
1.9 KiB
Go

package configure
import (
"encoding/json"
"fmt"
"github.com/nacos-group/nacos-sdk-go/v2/clients"
"github.com/nacos-group/nacos-sdk-go/v2/clients/config_client"
"github.com/nacos-group/nacos-sdk-go/v2/common/constant"
"github.com/nacos-group/nacos-sdk-go/v2/vo"
)
const (
AddressKey = "Nacos.Address"
PortKey = "Nacos.Port"
Namespace = "Nacos.Namespace"
Group = "Nacos.Group"
)
type nacos struct {
client config_client.IConfigClient
onChanged func(string, string)
group string
}
type NacosOptions struct {
Address string
Port int
Namespace string
Group string
}
func (c *conf) WithNacosOptions(options *NacosOptions) *conf {
c.nacosOptions = options
return c
}
func (c *conf) WithNacos() *conf {
c.useNacos = true
return c
}
func (n *nacos) Load(dataId string, v any) error {
voParam := vo.ConfigParam{
DataId: dataId,
Group: n.group,
OnChange: n.onChange,
}
content, err := n.client.GetConfig(voParam)
if err != nil {
return err
}
if len(content) == 0 {
return fmt.Errorf("parameters not configured:%s", dataId)
}
if err := json.Unmarshal([]byte(content), v); err != nil {
return err
}
n.client.ListenConfig(voParam)
return nil
}
func (n *nacos) onChange(namespace, group, dataId, data string) {
n.onChanged(dataId, data)
}
func createNacosClient(addr string, port int, namespace, group string) (config_client.IConfigClient, error) {
sc := []constant.ServerConfig{{
IpAddr: addr,
Port: uint64(port),
}}
cc := constant.ClientConfig{
NamespaceId: namespace,
TimeoutMs: 5000,
LogDir: "logs",
CacheDir: "cache",
LogLevel: "info",
NotLoadCacheAtStart: true,
}
configClient, err := clients.CreateConfigClient(map[string]any{
"serverConfigs": sc,
"clientConfig": cc,
})
if err != nil {
return nil, err
}
return configClient, nil
}