2016-11-17 21:03:54 +00:00
|
|
|
package consul
|
|
|
|
|
|
|
|
import (
|
2018-03-03 11:53:52 +00:00
|
|
|
"context"
|
2018-03-19 20:34:56 +07:00
|
|
|
"time"
|
2018-03-03 11:53:52 +00:00
|
|
|
|
2016-11-17 21:03:54 +00:00
|
|
|
consul "github.com/hashicorp/consul/api"
|
|
|
|
"github.com/micro/go-micro/registry"
|
|
|
|
)
|
|
|
|
|
2018-08-06 17:12:34 +01:00
|
|
|
// Connect specifies services should be registered as Consul Connect services
|
|
|
|
func Connect() registry.Option {
|
|
|
|
return func(o *registry.Options) {
|
|
|
|
if o.Context == nil {
|
|
|
|
o.Context = context.Background()
|
|
|
|
}
|
|
|
|
o.Context = context.WithValue(o.Context, "consul_connect", true)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-11-17 21:03:54 +00:00
|
|
|
func Config(c *consul.Config) registry.Option {
|
|
|
|
return func(o *registry.Options) {
|
|
|
|
if o.Context == nil {
|
|
|
|
o.Context = context.Background()
|
|
|
|
}
|
|
|
|
o.Context = context.WithValue(o.Context, "consul_config", c)
|
|
|
|
}
|
|
|
|
}
|
2018-03-19 20:34:56 +07:00
|
|
|
|
2018-11-23 17:11:37 +10:00
|
|
|
// AllowStale sets whether any Consul server (non-leader) can service
|
|
|
|
// a read. This allows for lower latency and higher throughput
|
|
|
|
// at the cost of potentially stale data.
|
|
|
|
// Works similar to Consul DNS Config option [1].
|
|
|
|
// Defaults to true.
|
|
|
|
//
|
|
|
|
// [1] https://www.consul.io/docs/agent/options.html#allow_stale
|
|
|
|
//
|
|
|
|
func AllowStale(v bool) registry.Option {
|
|
|
|
return func(o *registry.Options) {
|
|
|
|
if o.Context == nil {
|
|
|
|
o.Context = context.Background()
|
|
|
|
}
|
|
|
|
o.Context = context.WithValue(o.Context, "consul_allow_stale", v)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// QueryOptions specifies the QueryOptions to be used when calling
|
|
|
|
// Consul. See `Consul API` for more information [1].
|
|
|
|
//
|
|
|
|
// [1] https://godoc.org/github.com/hashicorp/consul/api#QueryOptions
|
|
|
|
//
|
|
|
|
func QueryOptions(q *consul.QueryOptions) registry.Option {
|
|
|
|
return func(o *registry.Options) {
|
|
|
|
if q == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if o.Context == nil {
|
|
|
|
o.Context = context.Background()
|
|
|
|
}
|
|
|
|
o.Context = context.WithValue(o.Context, "consul_query_options", q)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-19 20:34:56 +07:00
|
|
|
//
|
2018-03-21 18:17:56 +07:00
|
|
|
// TCPCheck will tell the service provider to check the service address
|
2018-03-19 20:34:56 +07:00
|
|
|
// and port every `t` interval. It will enabled only if `t` is greater than 0.
|
|
|
|
// See `TCP + Interval` for more information [1].
|
|
|
|
//
|
|
|
|
// [1] https://www.consul.io/docs/agent/checks.html
|
|
|
|
//
|
2018-03-21 18:17:56 +07:00
|
|
|
func TCPCheck(t time.Duration) registry.Option {
|
2018-03-19 20:34:56 +07:00
|
|
|
return func(o *registry.Options) {
|
|
|
|
if t <= time.Duration(0) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if o.Context == nil {
|
|
|
|
o.Context = context.Background()
|
|
|
|
}
|
2018-03-21 21:57:04 +07:00
|
|
|
o.Context = context.WithValue(o.Context, "consul_tcp_check", t)
|
2018-03-19 20:34:56 +07:00
|
|
|
}
|
|
|
|
}
|