package consul import ( "fmt" "speech-nlu-parse/pkg/util" "time" "github.com/hashicorp/consul/api" ) type ConsulSettingS struct { RunMode string Name string Tag []string IP string Port int ConsulAddr string ConsulToken string Interval time.Duration Deregister time.Duration } func RegisterService(cs *ConsulSettingS) error { consulConfig := api.DefaultConfig() consulConfig.Address = cs.ConsulAddr consulConfig.Token = cs.ConsulToken // 增加token if cs.IP == "" { cs.IP = util.GetLocalIP() } client, err := api.NewClient(consulConfig) if err != nil { fmt.Printf("new client error: %v\n", err) return err } agent := client.Agent() reg := &api.AgentServiceRegistration{ ID: fmt.Sprintf("%v-%v-%v", cs.Name, cs.IP, cs.Port), //服务结点的名称 Name: cs.Name, //服务名称 Tags: cs.Tag, //tag, 不可以为空 Port: cs.Port, //服务端口 Address: cs.IP, //服务IP Check: &api.AgentServiceCheck{ //健康检查 Interval: cs.Interval.String(), //健康检查间隔 GRPC: fmt.Sprintf("%v:%v/%v", cs.IP, cs.Port, cs.Name), //grpc支持,执行健康检查的地址,service会传到Health.Check函数中 DeregisterCriticalServiceAfter: cs.Deregister.String(), //注销时间,相当于过期时间 }, } if err := agent.ServiceRegister(reg); err != nil { fmt.Printf("service register error: %v\n", err) return err } return nil }