consul

package module
v0.0.0-...-168421c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 12, 2023 License: MIT Imports: 13 Imported by: 0

README

GRPC consul resolver

Feature rich and easy-to-use resolver which return endpoints for service from the Hashicorp Consul and watch for the changes.

This library is production ready and will always save backward-compatibility

Quick Start

For using resolving endpoints from your Hashicorp Consul just import this library with import _ /github.com/mbobakov/grpc-consul-resolver and pass valid connection string to the grpc.Dial.

For full example see this section

Connection string

consul://[user:password@]127.0.0.127:8555/my-service?[healthy=]&[wait=]&[near=]&[insecure=]&[limit=]&[tag=]&[token=]

Parameters:

Name Format Description
tag string Select endpoints only with this tag
healthy true/false Return only endpoints which pass all health-checks. Default: false
wait as in time.ParseDuration Wait time for watch changes. Due this time period endpoints will be force refreshed. Default: inherits agent property
insecure true/false Allow insecure communication with Consul. Default: true
near string Sort endpoints by response duration. Can be efficient combine with limit parameter default: "_agent"
limit int Limit number of endpoints for the service. Default: no limit
timeout as in time.ParseDuration Http-client timeout. Default: 60s
max-backoff as in time.ParseDuration Max backoff time for reconnect to consul. Reconnects will start from 10ms to max-backoff exponentialy with factor 2. Default: 1s
token string Consul token
dc string Consul datacenter to choose. Optional
allow-stale true/false Allow stale results from the agent. https://www.consul.io/api/features/consistency.html#stale
require-consistent true/false RequireConsistent forces the read to be fully consistent. This is more expensive but prevents ever performing a stale read.

Example

package main

import (
	"time"
	"log"

	_ "github.com/mbobakov/grpc-consul-resolver" // It's important

	"google.golang.org/grpc"
)

func main() {
    conn, err := grpc.Dial(
        "consul://127.0.0.1:8500/whoami?wait=14s&tag=manual",
        grpc.WithInsecure(),
        grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy": "round_robin"}`),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()
    ...
}

License

MIT-LICENSE. See LICENSE or the LICENSE file provided in the repository for details.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
Package tests is used for integration tests
Package tests is used for integration tests

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL