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  }