registry

package
v0.0.0-...-82b0641 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2021 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package registry is an interface for service discovery

Index

Constants

This section is empty.

Variables

View Source
var (
	// Not found error when GetService is called
	ErrNotFound = errors.New("service not found")
	// Watcher stopped error when watcher is stopped
	ErrWatcherStopped = errors.New("watcher stopped")
	// Service requires at least one node
	ErrNoNode = errors.New("require at least one node")
)

Functions

This section is empty.

Types

type DeregisterOption

type DeregisterOption func(*DeregisterOptions)

type DeregisterOptions

type DeregisterOptions struct {
	Context context.Context
	// Domain the service was registered in
	Domain string
}

type Endpoint

type Endpoint struct {
	Name     string            `json:"name"`
	Request  *Value            `json:"request"`
	Response *Value            `json:"response"`
	Metadata map[string]string `json:"metadata"`
}

type Event

type Event struct {
	// Id is registry id
	Id string
	// Type defines type of event
	Type EventType
	// Timestamp is event timestamp
	Timestamp time.Time
	// Service is registry service
	Service *Service
}

Event is registry event

type EventType

type EventType int

EventType defines registry event type

const (
	// Create is emitted when a new service is registered
	Create EventType = iota
	// Delete is emitted when an existing service is deregsitered
	Delete
	// Update is emitted when an existing servicec is updated
	Update
)

func (EventType) String

func (t EventType) String() string

String returns human readable event type

type Filter

type Filter func([]*Service) []*Service

Filter is used to filter a service during the selection process

func FilterEndpoint

func FilterEndpoint(name string) Filter

FilterEndpoint is an endpoint based Next Filter which will only return services with the endpoint specified.

func FilterLabel

func FilterLabel(key, val string) Filter

FilterLabel is a label based Next Filter which will only return services with the label specified.

func FilterVersion

func FilterVersion(version string) Filter

FilterVersion is a version based Next Filter which will only return services with the version specified.

type GetOption

type GetOption func(*GetOptions)

type GetOptions

type GetOptions struct {
	Context context.Context
	// Domain to scope the request to
	Domain string
}

type ListOption

type ListOption func(*ListOptions)

type ListOptions

type ListOptions struct {
	Context context.Context
	// Domain to scope the request to
	Domain string
}

type Node

type Node struct {
	Id       string            `json:"id"`
	Address  string            `json:"address"`
	Metadata map[string]string `json:"metadata"`
}

type Option

type Option func(*Options)

func Addrs

func Addrs(addrs ...string) Option

Addrs is the registry addresses to use

func Secure

func Secure(b bool) Option

Secure communication with the registry

func TLSConfig

func TLSConfig(t *tls.Config) Option

Specify TLS Config

func Timeout

func Timeout(t time.Duration) Option

type Options

type Options struct {
	Addrs     []string
	Timeout   time.Duration
	Secure    bool
	TLSConfig *tls.Config
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

type RegisterOption

type RegisterOption func(*RegisterOptions)

func RegisterTTL

func RegisterTTL(t time.Duration) RegisterOption

type RegisterOptions

type RegisterOptions struct {
	TTL time.Duration
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
	Domain  string
}

type Registry

type Registry interface {
	Options() Options
	Register(*Service, ...RegisterOption) error
	Deregister(*Service) error
	GetService(string) ([]*Service, error)
	ListServices() ([]*Service, error)
	Watch(...WatchOption) (Watcher, error)
	String() string
}

The registry provides an interface for service discovery and an abstraction over varying implementations {consul, etcd, zookeeper, ...}

type Result

type Result struct {
	Action  string
	Service *Service
}

Result is returned by a call to Next on the watcher. Actions can be create, update, delete

type Service

type Service struct {
	Name      string      `json:"name"`
	Version   string      `json:"version"`
	Endpoints []*Endpoint `json:"endpoints"`
	Nodes     []*Node     `json:"nodes"`
}

type Value

type Value struct {
	Name   string   `json:"name"`
	Type   string   `json:"type"`
	Values []*Value `json:"values"`
}

type WatchOption

type WatchOption func(*WatchOptions)

func WatchService

func WatchService(name string) WatchOption

Watch a service

type WatchOptions

type WatchOptions struct {
	// Specify a service to watch
	// If blank, the watch is for all services
	Service string
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

type Watcher

type Watcher interface {
	// Next is a blocking call
	Next() (*Result, error)
	Stop()
}

Watcher is an interface that returns updates about services within the registry.

Directories

Path Synopsis
Package cache provides a registry cache
Package cache provides a registry cache
Package etcd provides an etcd service registry
Package etcd provides an etcd service registry
Package mdns is a multicast dns registry Package mdns provides a multicast dns registry
Package mdns is a multicast dns registry Package mdns provides a multicast dns registry
Package memory provides an in-memory registry
Package memory provides an in-memory registry

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL