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  }