gitee.com/woood2/luca@v1.0.4/internal/discovery/consul.go (about) 1 package discovery 2 3 import ( 4 "fmt" 5 "github.com/go-kit/kit/log" 6 "github.com/go-kit/kit/sd" 7 consulsd "github.com/go-kit/kit/sd/consul" 8 "github.com/hashicorp/consul/api" 9 stdLog "log" 10 "os" 11 "strconv" 12 ) 13 14 func Logger() log.Logger { 15 logger := log.NewLogfmtLogger(os.Stderr) 16 logger = log.With(logger, "ts", log.DefaultTimestamp) 17 logger = log.With(logger, "caller", log.DefaultCaller) 18 19 return logger 20 } 21 22 func Client(consulAddress string, consulPort int) (consulsd.Client, *api.Client) { 23 consulConfig := api.DefaultConfig() 24 consulConfig.Address = consulAddress + ":" + strconv.Itoa(consulPort) 25 consulClient, err := api.NewClient(consulConfig) 26 if err != nil { 27 stdLog.Panicln(err) 28 } 29 client := consulsd.NewClient(consulClient) 30 return client, consulClient 31 } 32 33 func Register( 34 client consulsd.Client, 35 name string, 36 advertiseAddress string, 37 advertisePort int) (registar sd.Registrar) { 38 39 check := api.AgentServiceCheck{ 40 GRPC: fmt.Sprintf("%v:%v/%v", advertiseAddress, advertisePort, "air"), 41 Interval: "10s", 42 Timeout: "1s", 43 Notes: "Basic health checks", 44 } 45 46 asr := api.AgentServiceRegistration{ 47 ID: fmt.Sprintf("%v-%s:%d", name, advertiseAddress, advertisePort), //unique service ID 48 Name: name, 49 Address: advertiseAddress, 50 Port: advertisePort, 51 Tags: []string{name}, 52 Check: &check, 53 } 54 registar = consulsd.NewRegistrar(client, &asr, Logger()) 55 return 56 } 57 58 func RegisterRestful( 59 client consulsd.Client, 60 name string, 61 advertiseAddress string, 62 advertisePort int) (registar sd.Registrar) { 63 64 check := api.AgentServiceCheck{ 65 HTTP: fmt.Sprintf("http://%s:%d/health", advertiseAddress, advertisePort), 66 Interval: "10s", 67 Timeout: "1s", 68 Notes: "Basic health checks", 69 } 70 71 asr := api.AgentServiceRegistration{ 72 ID: fmt.Sprintf("%v-%s:%d", name, advertiseAddress, advertisePort), //unique service ID 73 Name: name, 74 Address: advertiseAddress, 75 Port: advertisePort, 76 Tags: []string{name}, 77 Check: &check, 78 } 79 registar = consulsd.NewRegistrar(client, &asr, Logger()) 80 return 81 }