From 4f6326c2366b0949bbf7f00e926a51d7d6ef08a9 Mon Sep 17 00:00:00 2001 From: Letian Date: Wed, 29 Dec 2021 22:00:09 +0800 Subject: [PATCH] fix(registry/consul): fix can not find service in 20s --- contrib/registry/consul/client.go | 12 +++++++++--- contrib/registry/consul/registry.go | 9 +++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/contrib/registry/consul/client.go b/contrib/registry/consul/client.go index b711a5bfe9f..902240bcb9e 100644 --- a/contrib/registry/consul/client.go +++ b/contrib/registry/consul/client.go @@ -21,11 +21,17 @@ type Client struct { // resolve service entry endpoints resolver ServiceResolver + // healthcheck time interval in seconds + healthcheckInterval int } // NewClient creates consul client func NewClient(cli *api.Client) *Client { - c := &Client{cli: cli, resolver: defaultResolver} + c := &Client{ + cli: cli, + resolver: defaultResolver, + healthcheckInterval: 10, + } c.ctx, c.cancel = context.WithCancel(context.Background()) return c } @@ -107,7 +113,7 @@ func (c *Client) Register(_ context.Context, svc *registry.ServiceInstance, enab for _, address := range checkAddresses { asr.Checks = append(asr.Checks, &api.AgentServiceCheck{ TCP: address, - Interval: "20s", + Interval: fmt.Sprintf("%ds", c.healthcheckInterval), DeregisterCriticalServiceAfter: "70s", }) } @@ -117,7 +123,7 @@ func (c *Client) Register(_ context.Context, svc *registry.ServiceInstance, enab return err } go func() { - ticker := time.NewTicker(time.Second * 20) + ticker := time.NewTicker(time.Second * time.Duration(c.healthcheckInterval)) defer ticker.Stop() for { select { diff --git a/contrib/registry/consul/registry.go b/contrib/registry/consul/registry.go index 41cdd8c75e4..b5491ecaa56 100644 --- a/contrib/registry/consul/registry.go +++ b/contrib/registry/consul/registry.go @@ -35,6 +35,15 @@ func WithServiceResolver(fn ServiceResolver) Option { } } +// WithHealthcheckInterval with healthcheck interval in seconds. +func WithHealthcheckInterval(interval int) Option { + return func(o *Registry) { + if o.cli != nil { + o.cli.healthcheckInterval = interval + } + } +} + // Config is consul registry config type Config struct { *api.Config