func NewSelector(opts ...selector.Option) selector.Selector { sopts := selector.Options{ Strategy: selector.Random, } for _, opt := range opts { opt(&sopts) } if sopts.Registry == nil { sopts.Registry = registry.DefaultRegistry } ttl := DefaultTTL if sopts.Context != nil { if t, ok := sopts.Context.Value(ttlKey{}).(time.Duration); ok { ttl = t } } c := &cacheSelector{ so: sopts, ttl: ttl, cache: make(map[string][]*registry.Service), ttls: make(map[string]time.Time), reload: make(chan bool, 1), exit: make(chan bool), } go c.run() return c }
// Return a new first node selector func DCSelector(opts ...selector.Option) selector.Selector { var sopts selector.Options for _, opt := range opts { opt(&sopts) } if sopts.Registry == nil { sopts.Registry = registry.DefaultRegistry } return &dcSelector{sopts} }
func newSelector(opts ...selector.Option) selector.Selector { sopts := selector.Options{ Strategy: selector.Random, } for _, opt := range opts { opt(&sopts) } if sopts.Registry == nil { sopts.Registry = registry.DefaultRegistry } return &blacklistSelector{ so: sopts, exit: make(chan bool), bl: newBlacklist(), } }
func NewSelector(opts ...selector.Option) selector.Selector { var sopts selector.Options for _, opt := range opts { opt(&sopts) } if sopts.Registry == nil { sopts.Registry = registry.DefaultRegistry } var once sync.Once bl := &blackListSelector{ once: once, so: sopts, ttl: 60, bl: make(map[string]blackListNode), exit: make(chan bool), } go bl.run() return bl }