Consul config fix https://github.com/micro/go-micro/pull/641
This commit is contained in:
		| @@ -17,10 +17,12 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type consulRegistry struct { | type consulRegistry struct { | ||||||
| 	Address string | 	Address []string | ||||||
| 	Client  *consul.Client |  | ||||||
| 	opts    registry.Options | 	opts    registry.Options | ||||||
|  |  | ||||||
|  | 	client *consul.Client | ||||||
|  | 	config *consul.Config | ||||||
|  |  | ||||||
| 	// connect enabled | 	// connect enabled | ||||||
| 	connect bool | 	connect bool | ||||||
|  |  | ||||||
| @@ -123,12 +125,12 @@ func configure(c *consulRegistry, opts ...registry.Option) { | |||||||
| 		config.HttpClient.Timeout = c.opts.Timeout | 		config.HttpClient.Timeout = c.opts.Timeout | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// create the client | 	// set address | ||||||
| 	client, _ := consul.NewClient(config) | 	c.Address = c.opts.Addrs | ||||||
|  |  | ||||||
| 	// set address/client | 	c.config = config | ||||||
| 	c.Address = config.Address |  | ||||||
| 	c.Client = client | 	c.Client() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (c *consulRegistry) Init(opts ...registry.Option) error { | func (c *consulRegistry) Init(opts ...registry.Option) error { | ||||||
| @@ -148,7 +150,7 @@ func (c *consulRegistry) Deregister(s *registry.Service) error { | |||||||
| 	c.Unlock() | 	c.Unlock() | ||||||
|  |  | ||||||
| 	node := s.Nodes[0] | 	node := s.Nodes[0] | ||||||
| 	return c.Client.Agent().ServiceDeregister(node.Id) | 	return c.Client().Agent().ServiceDeregister(node.Id) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (c *consulRegistry) Register(s *registry.Service, opts ...registry.RegisterOption) error { | func (c *consulRegistry) Register(s *registry.Service, opts ...registry.RegisterOption) error { | ||||||
| @@ -193,7 +195,7 @@ func (c *consulRegistry) Register(s *registry.Service, opts ...registry.Register | |||||||
| 			if time.Since(lastChecked) <= getDeregisterTTL(regInterval) { | 			if time.Since(lastChecked) <= getDeregisterTTL(regInterval) { | ||||||
| 				return nil | 				return nil | ||||||
| 			} | 			} | ||||||
| 			services, _, err := c.Client.Health().Checks(s.Name, c.queryOptions) | 			services, _, err := c.Client().Health().Checks(s.Name, c.queryOptions) | ||||||
| 			if err == nil { | 			if err == nil { | ||||||
| 				for _, v := range services { | 				for _, v := range services { | ||||||
| 					if v.ServiceID == node.Id { | 					if v.ServiceID == node.Id { | ||||||
| @@ -204,7 +206,7 @@ func (c *consulRegistry) Register(s *registry.Service, opts ...registry.Register | |||||||
| 		} else { | 		} else { | ||||||
| 			// if the err is nil we're all good, bail out | 			// 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 not, we don't know what the state is, so full re-register | ||||||
| 			if err := c.Client.Agent().PassTTL("service:"+node.Id, ""); err == nil { | 			if err := c.Client().Agent().PassTTL("service:"+node.Id, ""); err == nil { | ||||||
| 				return nil | 				return nil | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| @@ -256,7 +258,7 @@ func (c *consulRegistry) Register(s *registry.Service, opts ...registry.Register | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := c.Client.Agent().ServiceRegister(asr); err != nil { | 	if err := c.Client().Agent().ServiceRegister(asr); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -272,7 +274,7 @@ func (c *consulRegistry) Register(s *registry.Service, opts ...registry.Register | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// pass the healthcheck | 	// pass the healthcheck | ||||||
| 	return c.Client.Agent().PassTTL("service:"+node.Id, "") | 	return c.Client().Agent().PassTTL("service:"+node.Id, "") | ||||||
| } | } | ||||||
|  |  | ||||||
| func (c *consulRegistry) GetService(name string) ([]*registry.Service, error) { | func (c *consulRegistry) GetService(name string) ([]*registry.Service, error) { | ||||||
| @@ -281,9 +283,9 @@ func (c *consulRegistry) GetService(name string) ([]*registry.Service, error) { | |||||||
|  |  | ||||||
| 	// if we're connect enabled only get connect services | 	// if we're connect enabled only get connect services | ||||||
| 	if c.connect { | 	if c.connect { | ||||||
| 		rsp, _, err = c.Client.Health().Connect(name, "", false, c.queryOptions) | 		rsp, _, err = c.Client().Health().Connect(name, "", false, c.queryOptions) | ||||||
| 	} else { | 	} else { | ||||||
| 		rsp, _, err = c.Client.Health().Service(name, "", false, c.queryOptions) | 		rsp, _, err = c.Client().Health().Service(name, "", false, c.queryOptions) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| @@ -351,7 +353,7 @@ func (c *consulRegistry) GetService(name string) ([]*registry.Service, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (c *consulRegistry) ListServices() ([]*registry.Service, error) { | func (c *consulRegistry) ListServices() ([]*registry.Service, error) { | ||||||
| 	rsp, _, err := c.Client.Catalog().Services(c.queryOptions) | 	rsp, _, err := c.Client().Catalog().Services(c.queryOptions) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| @@ -377,6 +379,28 @@ func (c *consulRegistry) Options() registry.Options { | |||||||
| 	return c.opts | 	return c.opts | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (c *consulRegistry) Client() *consul.Client { | ||||||
|  | 	if c.client != nil { | ||||||
|  | 		return c.client | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(c.Address) == 0 { | ||||||
|  | 		tmp, _ := consul.NewClient(c.config) | ||||||
|  | 		return tmp | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	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() | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	c.client = tmpClint | ||||||
|  | 	return c.client | ||||||
|  | } | ||||||
|  |  | ||||||
| func NewRegistry(opts ...registry.Option) registry.Registry { | func NewRegistry(opts ...registry.Option) registry.Registry { | ||||||
| 	cr := &consulRegistry{ | 	cr := &consulRegistry{ | ||||||
| 		opts:        registry.Options{}, | 		opts:        registry.Options{}, | ||||||
|   | |||||||
| @@ -50,22 +50,24 @@ func newConsulTestRegistry(r *mockRegistry) (*consulRegistry, func()) { | |||||||
| 	} | 	} | ||||||
| 	cfg := consul.DefaultConfig() | 	cfg := consul.DefaultConfig() | ||||||
| 	cfg.Address = l.Addr().String() | 	cfg.Address = l.Addr().String() | ||||||
| 	cl, _ := consul.NewClient(cfg) |  | ||||||
|  |  | ||||||
| 	go newMockServer(r, l) | 	go newMockServer(r, l) | ||||||
|  |  | ||||||
| 	return &consulRegistry{ | 	var cr = &consulRegistry{ | ||||||
| 			Address:     cfg.Address, | 		config:      cfg, | ||||||
| 			Client:      cl, | 		Address:     []string{cfg.Address}, | ||||||
| 			opts:        registry.Options{}, | 		opts:        registry.Options{}, | ||||||
| 			register:    make(map[string]uint64), | 		register:    make(map[string]uint64), | ||||||
| 			lastChecked: make(map[string]time.Time), | 		lastChecked: make(map[string]time.Time), | ||||||
| 			queryOptions: &consul.QueryOptions{ | 		queryOptions: &consul.QueryOptions{ | ||||||
| 				AllowStale: true, | 			AllowStale: true, | ||||||
| 			}, | 		}, | ||||||
| 		}, func() { | 	} | ||||||
| 			l.Close() | 	cr.Client() | ||||||
| 		} |  | ||||||
|  | 	return cr, func() { | ||||||
|  | 		l.Close() | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func newServiceList(svc []*consul.ServiceEntry) []byte { | func newServiceList(svc []*consul.ServiceEntry) []byte { | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ func newConsulWatcher(cr *consulRegistry, opts ...registry.WatchOption) (registr | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	wp.Handler = cw.handle | 	wp.Handler = cw.handle | ||||||
| 	go wp.RunWithClientAndLogger(cr.Client, log.New(os.Stderr, "", log.LstdFlags)) | 	go wp.RunWithClientAndLogger(cr.Client(), log.New(os.Stderr, "", log.LstdFlags)) | ||||||
| 	cw.wp = wp | 	cw.wp = wp | ||||||
|  |  | ||||||
| 	return cw, nil | 	return cw, nil | ||||||
| @@ -209,7 +209,7 @@ func (cw *consulWatcher) handle(idx uint64, data interface{}) { | |||||||
| 		}) | 		}) | ||||||
| 		if err == nil { | 		if err == nil { | ||||||
| 			wp.Handler = cw.serviceHandler | 			wp.Handler = cw.serviceHandler | ||||||
| 			go wp.RunWithClientAndLogger(cw.r.Client, log.New(os.Stderr, "", log.LstdFlags)) | 			go wp.RunWithClientAndLogger(cw.r.Client(), log.New(os.Stderr, "", log.LstdFlags)) | ||||||
| 			cw.watchers[service] = wp | 			cw.watchers[service] = wp | ||||||
| 			cw.next <- ®istry.Result{Action: "create", Service: ®istry.Service{Name: service}} | 			cw.next <- ®istry.Result{Action: "create", Service: ®istry.Service{Name: service}} | ||||||
| 		} | 		} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user