Skip to content

Instantly share code, notes, and snippets.

@antklim
Created June 3, 2018 10:09
Show Gist options
  • Save antklim/4b9c27146510a8169717c794cc9f51ec to your computer and use it in GitHub Desktop.
Save antklim/4b9c27146510a8169717c794cc9f51ec to your computer and use it in GitHub Desktop.
Go Kit service discovery registrar
package greetersd
import (
"math/rand"
"os"
"strconv"
"time"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/sd"
consulsd "github.com/go-kit/kit/sd/consul"
"github.com/hashicorp/consul/api"
)
// ConsulRegister method.
func ConsulRegister(consulAddress string,
consulPort string,
advertiseAddress string,
advertisePort string) (registar sd.Registrar) {
// Logging domain.
var logger log.Logger
{
logger = log.NewLogfmtLogger(os.Stderr)
logger = log.With(logger, "ts", log.DefaultTimestampUTC)
logger = log.With(logger, "caller", log.DefaultCaller)
}
rand.Seed(time.Now().UTC().UnixNano())
// Service discovery domain. In this example we use Consul.
var client consulsd.Client
{
consulConfig := api.DefaultConfig()
consulConfig.Address = consulAddress + ":" + consulPort
consulClient, err := api.NewClient(consulConfig)
if err != nil {
logger.Log("err", err)
os.Exit(1)
}
client = consulsd.NewClient(consulClient)
}
check := api.AgentServiceCheck{
HTTP: "http://" + advertiseAddress + ":" + advertisePort + "/health",
Interval: "10s",
Timeout: "1s",
Notes: "Basic health checks",
}
port, _ := strconv.Atoi(advertisePort)
num := rand.Intn(100) // to make service ID unique
asr := api.AgentServiceRegistration{
ID: "go-kit-srv-greeter-" + strconv.Itoa(num), //unique service ID
Name: "go-kit-srv-greeter",
Address: advertiseAddress,
Port: port,
Tags: []string{"go-kit", "greeter"},
Check: &check,
}
registar = consulsd.NewRegistrar(client, &asr, logger)
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment