go 与 springcloud 微服务 使用 Nacos注册中心

Go集成Nacos
 

go get -u github.com/nacos-group/nacos-sdk-go

GO Service配置 与SpringCloud 服务使用同一个Metadata 配置属性源


func Service(configs []constant.ServerConfig, serverName, group string, serverPort uint64) {
	client, _ := clients.CreateNamingClient(map[string]interface{}{
		"serverConfigs": configs,
		"clientConfig": constant.ClientConfig{
			NamespaceId:  "phsc",
			TimeoutMs:    10 * 1000,
			BeatInterval: 5 * 1000,
			//CacheDir:            "data/nacos/cache",
			NotLoadCacheAtStart: true,
		},
	})
	ip := getIpAddr()
	RegisterServiceInstance(client, vo.RegisterInstanceParam{
		Ip:          ip,
		Port:        serverPort,
		ServiceName: serverName,
		Weight:      1,
		GroupName:   group,
		Enable:      true,
		Healthy:     true,
		Ephemeral:   true,
		Metadata: map[string]string{
			"preserved.heart.beat.interval": strconv.Itoa(1000 * 10), //25s
			"preserved.register.source":     "SPRING_CLOUD",
		},
	})

	//连接
	app = client
}

func getIpAddr() string {
	address, _ := net.InterfaceAddrs()
	for _, address := range address {
		if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				return ipnet.IP.String()
			}
		}
	}
	return "127.0.0.1"
}

func RegisterServiceInstance(client naming_client.INamingClient, param vo.RegisterInstanceParam) {
	success, _ := client.RegisterInstance(param)
	if success {
		log.Printf("[INFO] 服务名 [%s] 注册成功  address [%s:%d] \n", param.ServiceName, param.Ip, param.Port)
	} else {
		log.Fatalf("[ERROR] 服务名 [%s] 注册失败  address [%s:%d] \n", param.ServiceName, param.Ip, param.Port)
	}
	go func() {
		exitChan := make(chan os.Signal)
		signal.Notify(exitChan, os.Interrupt, os.Kill, syscall.SIGTERM)
		<-exitChan
		log.Printf("[EXIT] 服务关闭 [%s]  address [%s:%d] \n", param.ServiceName, param.Ip, param.Port)
		_, _ = client.DeregisterInstance(vo.DeregisterInstanceParam{
			Ip:          param.Ip,
			Port:        param.Port,
			Cluster:     param.ClusterName,
			ServiceName: param.ServiceName,
			GroupName:   param.GroupName,
			Ephemeral:   true, //立刻删除服务
		})
		os.Exit(1)
	}()

}


版权声明:本文为suqa1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。