Files
apiServer-service/utils/nacos/service.go
T
2025-05-19 17:26:18 +08:00

104 lines
2.4 KiB
Go

package nacos
import (
"github.com/nacos-group/nacos-sdk-go/v2/clients"
"github.com/nacos-group/nacos-sdk-go/v2/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/v2/model"
"github.com/nacos-group/nacos-sdk-go/v2/vo"
"os"
"strconv"
)
var (
cli naming_client.INamingClient
groupName string
ServerUriCache = make(map[string]model.Instance)
)
// NewNacosRegistry 创建一个nacos注册中心
func NewNacosRegistry() (*naming_client.INamingClient, error) {
InitNacosRegistryConfig()
if cli != nil {
return &cli, nil
}
groupName = os.Getenv("NACOS_GROUP_NAME")
var err error
cli, err = clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: cc,
ServerConfigs: sc,
},
)
if err != nil {
return nil, err
}
return &cli, nil
}
// RegisterService 注册当前服务到nacos中
func RegisterService() error {
client, err := NewNacosRegistry()
if err != nil {
return err
}
serviceName := os.Getenv("NACOS_SERVICE_NAME")
host := os.Getenv("NACOS_SERVICE_HOST")
port, err := strconv.Atoi(os.Getenv("NACOS_SERVICE_PORT"))
if err != nil {
port = 8848
}
weight, err := strconv.Atoi(os.Getenv("NACOS_SERVICE_WEIGHT"))
if err != nil {
weight = 10
}
_, err = (*client).RegisterInstance(vo.RegisterInstanceParam{
Ip: host,
Port: uint64(port),
ServiceName: serviceName,
Weight: float64(weight),
Enable: true,
Healthy: true,
Ephemeral: false,
GroupName: groupName,
})
if err != nil {
return err
}
return nil
}
// DiscoverServiceList 发现服务列表
func DiscoverServiceList(serviceName string) ([]model.Instance, error) {
client, err := NewNacosRegistry()
if err != nil {
return nil, err
}
instances, err := (*client).SelectInstances(vo.SelectInstancesParam{
ServiceName: serviceName,
HealthyOnly: false,
GroupName: groupName,
})
if err != nil {
return nil, err
}
return instances, nil
}
// DiscoverService 发现一个服务
func DiscoverService(serviceName string) (model.Instance, error) {
ServiceCache := ServerUriCache[serviceName]
client, err := NewNacosRegistry()
if err != nil {
return ServiceCache, err
}
instances, err := (*client).SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
ServiceName: serviceName,
GroupName: groupName,
})
if err != nil {
return ServiceCache, err
}
ServerUriCache[serviceName] = *instances
return *instances, nil
}