Files
hk4e/light/register.go
2022-11-20 15:38:00 +08:00

173 lines
3.8 KiB
Go

package light
import (
airClient "flswld.com/air-api/client"
"flswld.com/common/config"
"flswld.com/logger"
"os"
"strconv"
"time"
)
// 生成服务注册实例名
func getInstanceName() (string, error) {
host, err := os.Hostname()
if err != nil {
return "", err
}
instName := host + "-" + strconv.FormatInt(time.Now().UnixNano(), 10)
return instName, nil
}
// 注册HTTP服务
func RegisterHttpService(keepalive *bool) string {
inst := new(airClient.Instance)
inst.ServiceName = config.CONF.Air.ServiceName
instName, err := getInstanceName()
if err != nil {
logger.LOG.Error("get instance name error: %v", err)
panic(err)
}
inst.InstanceName = instName
ipAddr := os.Getenv("IP_ADDR")
if len(ipAddr) == 0 {
panic("ip addr env is nil")
}
addr := "http://" + ipAddr + ":" + strconv.Itoa(config.CONF.HttpPort)
inst.InstanceAddr = addr
var response *airClient.ResponseData
response, err = airClient.RegisterHttpService(*inst)
if err != nil {
panic(err)
}
if response.Code != 0 {
panic("response code error")
}
go httpServiceKeepalive(*inst, keepalive)
logger.LOG.Info("register http service success, instance: %v", *inst)
return instName
}
// HTTP服务心跳保持
func httpServiceKeepalive(inst airClient.Instance, keepalive *bool) {
ticker := time.NewTicker(time.Second * 15)
for {
<-ticker.C
if !*keepalive {
return
}
var response *airClient.ResponseData
var err error
response, err = airClient.KeepaliveHttpService(inst)
if err != nil {
logger.LOG.Error("http keepalive error: %v", err)
continue
}
if response.Code != 0 {
logger.LOG.Error("response code error")
continue
}
}
}
// 取消注册HTTP服务
func CancelHttpService(instanceName string) {
inst := new(airClient.Instance)
inst.ServiceName = config.CONF.Air.ServiceName
inst.InstanceName = instanceName
var response *airClient.ResponseData
var err error
response, err = airClient.CancelHttpService(*inst)
if err != nil {
logger.LOG.Error("cancel http service error: %v", err)
return
}
if response.Code != 0 {
logger.LOG.Error("response code error")
return
}
}
// 注册RPC服务
func RegisterRpcService(keepalive *bool) string {
inst := new(airClient.Instance)
inst.ServiceName = config.CONF.Air.ServiceName
instName, err := getInstanceName()
if err != nil {
logger.LOG.Error("get instance name error: %v", err)
panic(err)
}
inst.InstanceName = instName
ipAddr := os.Getenv("IP_ADDR")
if len(ipAddr) == 0 {
panic("ip addr env is nil")
}
addr := ipAddr + ":" + strconv.Itoa(config.CONF.Light.Port)
inst.InstanceAddr = addr
var response *airClient.ResponseData
response, err = airClient.RegisterRpcService(*inst)
if err != nil {
panic(err)
}
if response.Code != 0 {
panic("response code error")
}
go rpcServiceKeepalive(*inst, keepalive)
logger.LOG.Info("register rpc service success, instance: %v", *inst)
return instName
}
// RPC服务心跳保持
func rpcServiceKeepalive(inst airClient.Instance, keepalive *bool) {
ticker := time.NewTicker(time.Second * 15)
for {
<-ticker.C
if !*keepalive {
return
}
var response *airClient.ResponseData
var err error
response, err = airClient.KeepaliveRpcService(inst)
if err != nil {
logger.LOG.Error("rpc keepalive error: %v", err)
continue
}
if response.Code != 0 {
logger.LOG.Error("response code error")
continue
}
}
}
// 取消注册RPC服务
func CancelRpcService(instanceName string) {
inst := new(airClient.Instance)
inst.ServiceName = config.CONF.Air.ServiceName
inst.InstanceName = instanceName
var response *airClient.ResponseData
var err error
response, err = airClient.CancelRpcService(*inst)
if err != nil {
logger.LOG.Error("cancel rpc service error: %v", err)
return
}
if response.Code != 0 {
logger.LOG.Error("response code error")
return
}
}