go使用consul-api注册服务、注销服务
标签(空格分隔): go,consul
安装包
go get github.com/hashicorp/consul/api
注册、注销服务
package initialize
import (
"fmt"
"github.com/hashicorp/consul/api"
uuid "github.com/satori/go.uuid"
"go.uber.org/zap"
"os"
"os/signal"
"shop/user_service/global"
"syscall"
)
func ConsulRegister() error {
config := api.DefaultConfig()
config.Address = fmt.Sprintf("%s:%d", global.ServerConfig.ConsulConfig.Host, global.ServerConfig.ConsulConfig.Port)
client, err := api.NewClient(config)
if err != nil {
return err
}
reg := new(api.AgentServiceRegistration)
reg.Name = global.ServerConfig.Name
//reg.ID = global.ServerConfig.Name
serviceId := fmt.Sprintf("%s", uuid.NewV4())
reg.ID = serviceId
reg.Address = global.ServerConfig.Host
reg.Port = global.ServerConfig.Port
reg.Tags = []string{"user", "service", "grpc"}
// 健康检查
reg.Check = &api.AgentServiceCheck{
GRPC: fmt.Sprintf("%s:%d", global.ServerConfig.Host, global.ServerConfig.Port),
GRPCUseTLS: false,
Timeout: "5s",
Interval: "5s",
DeregisterCriticalServiceAfter: "10s",
}
go func() {
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
if err := client.Agent().ServiceDeregister(serviceId); err != nil {
zap.S().Infof("注销user-service[%s] error", serviceId)
os.Exit(1)
}
zap.S().Infof("注销user-service[%s] success", serviceId)
os.Exit(0)
}()
return client.Agent().ServiceRegister(reg)
}