github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/rpc/nacos/start.go (about) 1 package nacos 2 3 import ( 4 "fmt" 5 "net" 6 "strconv" 7 "strings" 8 "time" 9 10 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 11 "github.com/nacos-group/nacos-sdk-go/clients" 12 "github.com/nacos-group/nacos-sdk-go/common/constant" 13 "github.com/nacos-group/nacos-sdk-go/vo" 14 ) 15 16 // StartNacosClient start nacos client and register rest service in nacos 17 func StartNacosClient(logger log.Logger, urls string, namespace string, name string, externalAddr string) { 18 ip, port, err := ResolveIPAndPort(externalAddr) 19 if err != nil { 20 logger.Error(fmt.Sprintf("failed to resolve %s error: %s", externalAddr, err.Error())) 21 return 22 } 23 24 serverConfigs, err := getServerConfigs(urls) 25 if err != nil { 26 logger.Error(fmt.Sprintf("failed to resolve nacos server url %s: %s", urls, err.Error())) 27 return 28 } 29 client, err := clients.CreateNamingClient(map[string]interface{}{ 30 "serverConfigs": serverConfigs, 31 "clientConfig": constant.ClientConfig{ 32 TimeoutMs: 5000, 33 ListenInterval: 10000, 34 NotLoadCacheAtStart: true, 35 NamespaceId: namespace, 36 LogDir: "/dev/null", 37 LogLevel: "error", 38 }, 39 }) 40 if err != nil { 41 logger.Error(fmt.Sprintf("failed to create nacos client. error: %s", err.Error())) 42 return 43 } 44 45 _, err = client.RegisterInstance(vo.RegisterInstanceParam{ 46 Ip: ip, 47 Port: uint64(port), 48 ServiceName: name, 49 Weight: 10, 50 ClusterName: "DEFAULT", 51 Enable: true, 52 Healthy: true, 53 Ephemeral: true, 54 Metadata: map[string]string{ 55 "preserved.register.source": "GO", 56 "app_registry_tag": strconv.FormatInt(time.Now().Unix(), 10), 57 }, 58 }) 59 if err != nil { 60 logger.Error(fmt.Sprintf("failed to register instance in nacos server. error: %s", err.Error())) 61 return 62 } 63 logger.Info("register application instance in nacos successfully") 64 } 65 66 func ResolveIPAndPort(addr string) (string, int, error) { 67 laddr := strings.Split(addr, ":") 68 ip := laddr[0] 69 if ip == "127.0.0.1" { 70 return GetLocalIP(), 26659, nil 71 } 72 port, err := strconv.Atoi(laddr[1]) 73 if err != nil { 74 return "", 0, err 75 } 76 return ip, port, nil 77 } 78 79 // GetLocalIP get local ip 80 func GetLocalIP() string { 81 addrs, err := net.InterfaceAddrs() 82 if err != nil { 83 return "" 84 } 85 for _, address := range addrs { 86 if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { 87 if ipnet.IP.To4() != nil { 88 return ipnet.IP.String() 89 } 90 } 91 } 92 return "" 93 }