44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Package selector is a way to pick a list of 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 = NewSelector()
 | 
						|
 | 
						|
	ErrNotFound      = errors.New("not found")
 | 
						|
	ErrNoneAvailable = errors.New("none available")
 | 
						|
)
 |