| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | package discoveryimport (	"context"	"github.com/go-kit/kit/log"	"github.com/go-kit/kit/sd"	"github.com/go-kit/kit/sd/consul"	"github.com/hashicorp/consul/api"	"os"	"strconv")type DiscoveryClient struct {	client consul.Client	register sd.Registrar	config *api.Config	registration *api.AgentServiceRegistration}func NewAgentServiceRegistration(serviceName, instanceId, healthCheckUrl, serviceAddr string, servicePort int, meta map[string]string) *api.AgentServiceRegistration {	return &api.AgentServiceRegistration{		ID:      instanceId,		Name:    serviceName,		Address: serviceAddr,		Port:    servicePort,		Meta:    meta,		Check: &api.AgentServiceCheck{			DeregisterCriticalServiceAfter: "30s",			HTTP:                           "http://" + serviceAddr + ":" + strconv.Itoa(servicePort) + healthCheckUrl,			Interval:                       "15s",		},	}}func NewDiscoveryClient(host string, port int, registration *api.AgentServiceRegistration) (*DiscoveryClient, error) {	config := api.DefaultConfig()	config.Address = host + ":" + strconv.Itoa(port)	client, err := api.NewClient(config)	if err != nil{		return nil, err	}	sdClient := consul.NewClient(client)	return &DiscoveryClient{		client: sdClient,		config: config,		registration: registration,		register: consul.NewRegistrar(sdClient, registration, log.NewLogfmtLogger(os.Stderr)),	}, nil}func (consulClient *DiscoveryClient) Register(ctx context.Context)  {	consulClient.register.Register()}func (consulClient *DiscoveryClient) Deregister(ctx context.Context)  {	consulClient.register.Deregister()}func (consulClient *DiscoveryClient) DiscoverServices(ctx context.Context, serviceName string) ([] *api.AgentService, error) {	result, _, err := consulClient.client.Service(serviceName, "", false, nil)	if err != nil{		return nil, err	}	rsp := make([]*api.AgentService, 0, len(result))	for _, v := range result{		rsp = append(rsp, v.Service)	}	return rsp, err}
 |