github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/rpc/nacos/utils.go (about) 1 package nacos 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 8 "github.com/nacos-group/nacos-sdk-go/clients" 9 "github.com/nacos-group/nacos-sdk-go/common/constant" 10 "github.com/nacos-group/nacos-sdk-go/model" 11 "github.com/nacos-group/nacos-sdk-go/vo" 12 ) 13 14 func GetOneInstance(urls string, nameSpace string, param vo.SelectOneHealthInstanceParam) (instance *model.Instance, err error) { 15 serverConfigs, err := getServerConfigs(urls) 16 if err != nil { 17 return nil, fmt.Errorf("failed to resolve nacos server url %s: %s", urls, err.Error()) 18 } 19 20 namingClient, err := clients.CreateNamingClient(map[string]interface{}{ 21 "serverConfigs": serverConfigs, 22 "clientConfig": constant.ClientConfig{ 23 NamespaceId: nameSpace, 24 TimeoutMs: 5000, 25 NotLoadCacheAtStart: true, 26 LogDir: "/dev/null", 27 }, 28 }) 29 if err != nil { 30 return nil, fmt.Errorf("failed to create nacos client when getting one service. error: %s", err.Error()) 31 } 32 33 instance, err = namingClient.SelectOneHealthyInstance(param) 34 if err != nil { 35 return nil, fmt.Errorf("failed to get %s service in [%s, %s]. error: %s", param, urls, nameSpace, err.Error()) 36 } 37 return instance, nil 38 } 39 40 func getServerConfigs(urls string) ([]constant.ServerConfig, error) { 41 // nolint 42 var configs []constant.ServerConfig 43 for _, url := range strings.Split(urls, ",") { 44 laddr := strings.Split(url, ":") 45 serverPort, err := strconv.Atoi(laddr[1]) 46 if err != nil { 47 return nil, err 48 } 49 configs = append(configs, constant.ServerConfig{ 50 IpAddr: laddr[0], 51 Port: uint64(serverPort), 52 }) 53 } 54 return configs, nil 55 }