package utils
import (
"double-preventionv2/global"
"fmt"
"github.com/nacos-group/nacos-sdk-go/clients"
"github.com/nacos-group/nacos-sdk-go/clients/config_client"
"github.com/nacos-group/nacos-sdk-go/clients/nacos_client"
"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/common/http_agent"
"github.com/nacos-group/nacos-sdk-go/model"
utils "github.com/nacos-group/nacos-sdk-go/util"
"github.com/nacos-group/nacos-sdk-go/vo"
"log"
"strconv"
)
func CreateNamingClient() (namingClient naming_client.INamingClient) {
namingClient, err := clients.CreateNamingClient(map[string]interface{}{
"serverConfigs": []constant.ServerConfig{
{
IpAddr: global.GVA_CONFIG.ServerConfig.IpAddr,
Port: global.GVA_CONFIG.ServerConfig.Port,
},
},
"clientConfig": constant.ClientConfig{
TimeoutMs: global.GVA_CONFIG.ClientConfig.TimeoutMs,
ListenInterval: global.GVA_CONFIG.ClientConfig.ListenInterval,
BeatInterval: global.GVA_CONFIG.ClientConfig.BeatInterval,
NamespaceId: global.GVA_CONFIG.ClientConfig.NamespaceId,
UpdateThreadNum: global.GVA_CONFIG.ClientConfig.UpdateThreadNum,
NotLoadCacheAtStart: global.GVA_CONFIG.ClientConfig.NotLoadCacheAtStart,
UpdateCacheWhenEmpty: global.GVA_CONFIG.ClientConfig.UpdateCacheWhenEmpty,
},
})
if err != nil {
panic(err)
}
return
}
func RegisterInstance(namingClient naming_client.INamingClient) {
boo, _ := namingClient.RegisterInstance(vo.RegisterInstanceParam{
Ip: utils.LocalIP(),
Port: uint64(global.GVA_CONFIG.System.Addr),
ServiceName: global.GVA_CONFIG.System.Name,
Weight: 10,
Enable: true,
Healthy: true,
Ephemeral: true,
Metadata: map[string]string{
"preserved.register.source": "SPRING_CLOUD",
},
})
fmt.Println(boo)
}
func DeregisterInstance(namingClient naming_client.INamingClient) {
namingClient.DeregisterInstance(vo.DeregisterInstanceParam{
Ip: utils.LocalIP(),
Port: uint64(global.GVA_CONFIG.System.Addr),
ServiceName: global.GVA_CONFIG.System.Name,
Ephemeral: true,
})
}
func GetService(namingClient naming_client.INamingClient) (service model.Service) {
service, _ = namingClient.GetService(vo.GetServiceParam{
ServiceName: global.GVA_CONFIG.System.Name,
})
return
}
func SelectAllInstances(namingClient naming_client.INamingClient) (instances []model.Instance) {
instances, _ = namingClient.SelectAllInstances(vo.SelectAllInstancesParam{
ServiceName: global.GVA_CONFIG.System.Name,
})
return
}
func SelectInstances(namingClient naming_client.INamingClient) (instances []model.Instance) {
instances, _ = namingClient.SelectInstances(vo.SelectInstancesParam{
ServiceName: global.GVA_CONFIG.System.Name,
HealthyOnly: true,
})
return
}
func SelectOneHealthyInstance(namingClient naming_client.INamingClient) (instance *model.Instance) {
instance, _ = namingClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
ServiceName: global.GVA_CONFIG.System.Name,
})
return
}
func Subscribe(namingClient naming_client.INamingClient) {
namingClient.Subscribe(&vo.SubscribeParam{
ServiceName: global.GVA_CONFIG.System.Name,
SubscribeCallback: func(services []model.SubscribeService, err error) {
log.Printf("\n\n callback return services:%s \n\n", utils.ToJsonString(services))
},
})
}
func Unsubscribe(namingClient naming_client.INamingClient) {
namingClient.Unsubscribe(&vo.SubscribeParam{
ServiceName: global.GVA_CONFIG.System.Name,
SubscribeCallback: func(services []model.SubscribeService, err error) {
log.Printf("\n\n callback return services:%s \n\n", utils.ToJsonString(services))
},
})
}
func ConfigClient() config_client.ConfigClient {
nc := nacos_client.NacosClient{}
nc.SetServerConfig([]constant.ServerConfig{
constant.ServerConfig{
IpAddr: global.IPADDR,
Port: global.PORT,
ContextPath: "/nacos",
}})
nc.SetClientConfig(constant.ClientConfig{
TimeoutMs: 10000,
BeatInterval: 5000,
ListenInterval: 5000,
NotLoadCacheAtStart: true,
})
nc.SetHttpAgent(&http_agent.HttpAgent{})
client, _ := config_client.NewConfigClient(&nc)
return client
}
func GetConfig(namingClient config_client.ConfigClient) (content string) {
content, err := namingClient.GetConfig(vo.ConfigParam{
DataId: global.NOCOS_CONFIG_DATAID,
Group: global.NOCOS_CONFIG_GROUP,
})
IsError(err)
return
}
func HttpPaths(serverName string) (httpPath string) {
instance, _ := global.GVA_NACOS.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
ServiceName: serverName,
})
httpPath = "http://" + instance.Ip + ":" + strconv.Itoa(int(instance.Port))
return
}