104 lines
2.4 KiB
Go
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
|
|
}
|