diff --git a/registry/consul_registry.go b/registry/consul_registry.go index e8de9ead..6540c2a7 100644 --- a/registry/consul_registry.go +++ b/registry/consul_registry.go @@ -180,10 +180,21 @@ func (c *consulRegistry) Register(s *Service, opts ...RegisterOption) error { // if it's already registered and matches then just pass the check if ok && v == h { - // if the err is nil we're all good, bail out - // if not, we don't know what the state is, so full re-register - if err := c.Client.Agent().PassTTL("service:"+node.Id, ""); err == nil { - return nil + if options.TTL == time.Duration(0) { + services,_, err := c.Client.Health().Checks(s.Name, nil) + if err == nil { + for _, v := range services { + if v.ServiceID == node.Id { + return nil + } + } + } + }else{ + // if the err is nil we're all good, bail out + // if not, we don't know what the state is, so full re-register + if err := c.Client.Agent().PassTTL("service:"+node.Id, ""); err == nil { + return nil + } } }