mirror of
https://github.com/go-micro/go-micro.git
synced 2024-11-24 08:02:32 +02:00
47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
// Package selector is a way to load balance service nodes
|
|
package selector
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/micro/go-micro/registry"
|
|
)
|
|
|
|
// Selector builds on the registry as a mechanism to pick nodes
|
|
// and mark their status. This allows host pools and other things
|
|
// to be built using various algorithms.
|
|
type Selector interface {
|
|
Init(opts ...Option) error
|
|
Options() Options
|
|
// Select returns a function which should return the next node
|
|
Select(service string, opts ...SelectOption) (Next, error)
|
|
// Mark sets the success/error against a node
|
|
Mark(service string, node *registry.Node, err error)
|
|
// Reset returns state back to zero for a service
|
|
Reset(service string)
|
|
// Close renders the selector unusable
|
|
Close() error
|
|
// Name of the selector
|
|
String() string
|
|
}
|
|
|
|
// Next is a function that returns the next node
|
|
// based on the selector's strategy
|
|
type Next func() (*registry.Node, error)
|
|
|
|
// Filter is used to filter a service during the selection process
|
|
type Filter func([]*registry.Service) []*registry.Service
|
|
|
|
// Strategy is a selection strategy e.g random, round robin
|
|
type Strategy func([]*registry.Service) Next
|
|
|
|
var (
|
|
DefaultSelector = newDefaultSelector()
|
|
|
|
ErrNotFound = errors.New("not found")
|
|
ErrNoneAvailable = errors.New("none available")
|
|
)
|
|
|
|
func NewSelector(opts ...Option) Selector {
|
|
return newDefaultSelector(opts...)
|
|
}
|