diff --git a/registry/consul/consul.go b/registry/consul/consul.go index 32360987..4b6fa770 100644 --- a/registry/consul/consul.go +++ b/registry/consul/consul.go @@ -97,24 +97,33 @@ func configure(c *consulRegistry, opts ...registry.Option) { } // check if there are any addrs - if len(c.opts.Addrs) > 0 { - addr, port, err := net.SplitHostPort(c.opts.Addrs[0]) + var addrs []string + + // iterate the options addresses + for _, address := range c.opts.Addrs { + // check we have a port + addr, port, err := net.SplitHostPort(address) if ae, ok := err.(*net.AddrError); ok && ae.Err == "missing port in address" { port = "8500" - addr = c.opts.Addrs[0] - config.Address = fmt.Sprintf("%s:%s", addr, port) + addr = address + addrs = append(addrs, fmt.Sprintf("%s:%s", addr, port)) } else if err == nil { - config.Address = fmt.Sprintf("%s:%s", addr, port) + addrs = append(addrs, fmt.Sprintf("%s:%s", addr, port)) } } + // set the addrs + if len(addrs) > 0 { + c.Address = addrs + config.Address = c.Address[0] + } + if config.HttpClient == nil { config.HttpClient = new(http.Client) } // requires secure connection? if c.opts.Secure || c.opts.TLSConfig != nil { - config.Scheme = "https" // We're going to support InsecureSkipVerify config.HttpClient.Transport = newTransport(c.opts.TLSConfig) @@ -125,11 +134,13 @@ func configure(c *consulRegistry, opts ...registry.Option) { config.HttpClient.Timeout = c.opts.Timeout } - // set address - c.Address = c.opts.Addrs - + // set the config c.config = config + // remove client + c.client = nil + + // setup the client c.Client() } @@ -384,20 +395,28 @@ func (c *consulRegistry) Client() *consul.Client { return c.client } - if len(c.Address) == 0 { - tmp, _ := consul.NewClient(c.config) - return tmp + for _, addr := range c.Address { + // set the address + c.config.Address = addr + + // create a new client + tmpClient, _ := consul.NewClient(c.config) + + // test the client + _, err := tmpClient.Agent().Host() + if err != nil { + continue + } + + // set the client + c.client = tmpClient + return c.client } - c.config.Address = c.Address[0] - tmpClint, _ := consul.NewClient(c.config) - _, err := tmpClint.Agent().Host() - if err != nil { - c.Address = c.Address[1:] - return c.Client() - } + // set the default + c.client, _ = consul.NewClient(c.config) - c.client = tmpClint + // return the client return c.client }