registry

package
v3.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 17, 2023 License: Apache-2.0 Imports: 22 Imported by: 36

Documentation

Overview

Package registry defines interfaces to be implemented by service register and service discovery driver.

Index

Constants

View Source
const (
	RegistryConnDelay = 3               // connection delay
	MaxWaitInterval   = 3 * time.Second // max wait interval
)
View Source
const DefaultPageSize = 100

Variables

This section is empty.

Functions

func ToConfigurators

func ToConfigurators(urls []*common.URL, f func(url *common.URL) config_center.Configurator) []config_center.Configurator

ToConfigurators converts @urls by @f to config_center.Configurators

Types

type BaseConfigurationListener

type BaseConfigurationListener struct {
	// contains filtered or unexported fields
}

nolint

func (*BaseConfigurationListener) Configurators

func (bcl *BaseConfigurationListener) Configurators() []config_center.Configurator

Configurators gets Configurator from config center

func (*BaseConfigurationListener) InitWith

InitWith will init BaseConfigurationListener by @key+@Listener+@f

func (*BaseConfigurationListener) OverrideUrl

func (bcl *BaseConfigurationListener) OverrideUrl(url *common.URL)

OverrideUrl gets existing configuration rule and overrides provider url before exporting.

func (*BaseConfigurationListener) Process

Process the notification event once there's any change happens on the config.

type BaseRegistry

type BaseRegistry struct {
	*common.URL
	// contains filtered or unexported fields
}

BaseRegistry is a common logic abstract for registry. It implement Registry interface.

func (*BaseRegistry) Destroy

func (r *BaseRegistry) Destroy()

Destroy for graceful down

func (*BaseRegistry) Done

func (r *BaseRegistry) Done() chan struct{}

Done open for outside to listen the event of registry Destroy() called.

func (*BaseRegistry) GetURL

func (r *BaseRegistry) GetURL() *common.URL

GetURL for get registry's url

func (*BaseRegistry) InitBaseRegistry

func (r *BaseRegistry) InitBaseRegistry(url *common.URL, facadeRegistry FacadeBasedRegistry) Registry

InitBaseRegistry for init some local variables and set BaseRegistry's subclass to it

func (*BaseRegistry) IsAvailable

func (r *BaseRegistry) IsAvailable() bool

IsAvailable judge to is registry not closed by chan r.done

func (*BaseRegistry) LoadSubscribeInstances added in v3.0.5

func (r *BaseRegistry) LoadSubscribeInstances(url *common.URL, notify NotifyListener) error

LoadSubscribeInstances load subscribe instance

func (*BaseRegistry) Register

func (r *BaseRegistry) Register(url *common.URL) error

Register implement interface registry to register

func (*BaseRegistry) RestartCallBack

func (r *BaseRegistry) RestartCallBack() bool

RestartCallBack for reregister when reconnect

func (*BaseRegistry) Subscribe

func (r *BaseRegistry) Subscribe(url *common.URL, notifyListener NotifyListener) error

Subscribe :subscribe from registry, event will notify by notifyListener

func (*BaseRegistry) UnRegister

func (r *BaseRegistry) UnRegister(url *common.URL) error

UnRegister implement interface registry to unregister

func (*BaseRegistry) UnSubscribe

func (r *BaseRegistry) UnSubscribe(url *common.URL, notifyListener NotifyListener) error

UnSubscribe URL

func (*BaseRegistry) WaitGroup

func (r *BaseRegistry) WaitGroup() *sync.WaitGroup

WaitGroup open for outside add the waitgroup to add some logic before registry destroyed over(graceful down)

type DefaultServiceInstance

type DefaultServiceInstance struct {
	ID              string
	ServiceName     string
	Host            string
	Port            int
	Enable          bool
	Healthy         bool
	Metadata        map[string]string
	ServiceMetadata *common.MetadataInfo
	Address         string
	GroupName       string

	Tag string
	// contains filtered or unexported fields
}

DefaultServiceInstance the default implementation of ServiceInstance or change the ServiceInstance to be struct???

func (*DefaultServiceInstance) Copy

func (d *DefaultServiceInstance) Copy(endpoint *Endpoint) ServiceInstance

Copy return a instance with different port

func (*DefaultServiceInstance) GetAddress

func (d *DefaultServiceInstance) GetAddress() string

GetAddress will return the ip:Port

func (*DefaultServiceInstance) GetEndPoints

func (d *DefaultServiceInstance) GetEndPoints() []*Endpoint

GetEndPoints get end points from metadata

func (*DefaultServiceInstance) GetHost

func (d *DefaultServiceInstance) GetHost() string

GetHost will return the hostname

func (*DefaultServiceInstance) GetID

func (d *DefaultServiceInstance) GetID() string

GetID will return this instance's id. It should be unique.

func (*DefaultServiceInstance) GetMetadata

func (d *DefaultServiceInstance) GetMetadata() map[string]string

GetMetadata will return the metadata, it will never return nil

func (*DefaultServiceInstance) GetPort

func (d *DefaultServiceInstance) GetPort() int

GetPort will return the port.

func (*DefaultServiceInstance) GetServiceName

func (d *DefaultServiceInstance) GetServiceName() string

GetServiceName will return the serviceName

func (*DefaultServiceInstance) GetTag added in v3.1.0

func (d *DefaultServiceInstance) GetTag() string

func (*DefaultServiceInstance) IsEnable

func (d *DefaultServiceInstance) IsEnable() bool

IsEnable will return the enable status of this instance

func (*DefaultServiceInstance) IsHealthy

func (d *DefaultServiceInstance) IsHealthy() bool

IsHealthy will return the value represent the instance whether healthy or not

func (*DefaultServiceInstance) SetServiceMetadata

func (d *DefaultServiceInstance) SetServiceMetadata(m *common.MetadataInfo)

SetServiceMetadata save metadata in instance

func (*DefaultServiceInstance) ToURLs

func (d *DefaultServiceInstance) ToURLs(service *common.ServiceInfo) []*common.URL

ToURLs return a list of url.

type Endpoint

type Endpoint struct {
	Port     int    `json:"port,omitempty"`
	Protocol string `json:"protocol,omitempty"`
}

nolint

type FacadeBasedRegistry

type FacadeBasedRegistry interface {
	Registry

	CreatePath(string) error
	DoRegister(string, string) error
	DoUnregister(string, string) error
	DoSubscribe(conf *common.URL) (Listener, error)
	DoUnsubscribe(conf *common.URL) (Listener, error)
	CloseAndNilClient()
	CloseListener()
	InitListeners()
}

FacadeBasedRegistry is the interface of Registry, and it is designed for registry who want to inherit BaseRegistry. If there is no special case, you'd better inherit BaseRegistry and implement the FacadeBasedRegistry interface instead of directly implementing the Registry interface.

CreatePath method create the path in the registry.

DoRegister method actually does the register job.

DoUnregister method does the unregister job.

DoSubscribe method actually subscribes the URL.

DoUnsubscribe method does unsubscribe the URL.

CloseAndNilClient method closes the client and then reset the client in registry to nil you should notice that this method will be invoked inside a lock. So you should implement this method as light weighted as you can.

CloseListener method closes listeners.

InitListeners method init listeners

type KeyFunc

type KeyFunc func(*common.URL) string

type Listener

type Listener interface {
	// Next returns next service event once received
	Next() (*ServiceEvent, error)
	// Close closes this listener
	Close()
}

Listener Deprecated!

type MappingListener added in v3.1.0

type MappingListener interface {
	OnEvent(e observer.Event) error
	Stop()
}

type MockRegistry

type MockRegistry struct {
	// contains filtered or unexported fields
}

MockRegistry is used as mock registry

func (*MockRegistry) Destroy

func (r *MockRegistry) Destroy()

nolint

func (*MockRegistry) GetURL

func (r *MockRegistry) GetURL() *common.URL

nolint

func (*MockRegistry) IsAvailable

func (r *MockRegistry) IsAvailable() bool

IsAvailable is use for determine a mock registry available

func (*MockRegistry) LoadSubscribeInstances added in v3.0.5

func (r *MockRegistry) LoadSubscribeInstances(_ *common.URL, _ NotifyListener) error

LoadSubscribeInstances load subscribe instance

func (*MockRegistry) MockEvent

func (r *MockRegistry) MockEvent(event *ServiceEvent)

nolint

func (*MockRegistry) MockEvents

func (r *MockRegistry) MockEvents(events []*ServiceEvent)

nolint

func (*MockRegistry) Register

func (*MockRegistry) Register(url *common.URL) error

Register is used as a mock registry

func (*MockRegistry) Subscribe

func (r *MockRegistry) Subscribe(url *common.URL, notifyListener NotifyListener) error

nolint

func (*MockRegistry) UnRegister

func (r *MockRegistry) UnRegister(conf *common.URL) error

nolint

func (*MockRegistry) UnSubscribe

func (r *MockRegistry) UnSubscribe(url *common.URL, notifyListener NotifyListener) error

UnSubscribe :

type NotifyListener

type NotifyListener interface {
	// Notify supports notifications on the service interface and the dimension of the data type. When a list of
	// events are passed in, it's considered as a complete list, on the other side, if one single event is
	// passed in, then it's a incremental event. Pls. note when a list (instead of single event) comes,
	// the impl of NotifyListener may abandon the accumulated result from previous notifications.
	Notify(*ServiceEvent)
	// NotifyAll the events are complete Service Event List.
	// The argument of events []*ServiceEvent is equal to urls []*URL, The Action of serviceEvent should be EventTypeUpdate.
	// If your registry center can only get all urls but can't get individual event, you should use this one.
	// After notify the address, the callback func will be invoked.
	NotifyAll([]*ServiceEvent, func())
}

nolint

type Registry

type Registry interface {
	common.Node

	// Register is used for service provider calling, register services
	// to registry. And it is also used for service consumer calling, register
	// services cared about, for dubbo's admin monitoring.
	Register(url *common.URL) error

	// UnRegister is required to support the contract:
	// 1. If it is the persistent stored data of dynamic=false, the
	//    registration data can not be found, then the IllegalStateException
	//    is thrown, otherwise it is ignored.
	// 2. Unregister according to the full url match.
	// url Registration information, is not allowed to be empty, e.g:
	// dubbo://10.20.153.10/org.apache.dubbo.foo.BarService?version=1.0.0&application=kylin
	UnRegister(url *common.URL) error

	// Subscribe is required to support the contract:
	// When creating new registry extension, pls select one of the
	// following modes.
	// Will remove in dubbogo version v1.1.0
	// mode1: return Listener with Next function which can return
	//        subscribe service event from registry
	// Deprecated!
	// subscribe(event.URL) (Listener, error)
	// Will replace mode1 in dubbogo version v1.1.0
	// mode2: callback mode, subscribe with notify(notify listener).
	Subscribe(*common.URL, NotifyListener) error

	// UnSubscribe is required to support the contract:
	// 1. If don't subscribe, ignore it directly.
	// 2. Unsubscribe by full URL match.
	// url Subscription condition, not allowed to be empty, e.g.
	// consumer://10.20.153.10/org.apache.dubbo.foo.BarService?version=1.0.0&application=kylin
	// listener A listener of the change event, not allowed to be empty
	UnSubscribe(*common.URL, NotifyListener) error

	// LoadSubscribeInstances Because the subscription is asynchronous,
	// it may cause the consumer to fail to obtain the provider.
	// so sync load the instance of the preparing to subscribe service before
	// formally subscribing.
	LoadSubscribeInstances(*common.URL, NotifyListener) error
}

Registry is the interface that wraps Register、UnRegister、Subscribe and UnSubscribe method.

func NewMockRegistry

func NewMockRegistry(url *common.URL) (Registry, error)

NewMockRegistry creates a mock registry

type RegistryFactory

type RegistryFactory interface {
	GetRegistries() []Registry
}

RegistryFactory is the interface that wraps GetRegistries method.

GetRegistries method get all registries.

type ServiceDiscovery

type ServiceDiscovery interface {
	fmt.Stringer

	// Destroy will destroy the service discovery.
	// If the discovery cannot be destroy, it will return an error.
	Destroy() error

	// Register will register an instance of ServiceInstance to registry
	Register(instance ServiceInstance) error

	// Update will update the data of the instance in registry
	Update(instance ServiceInstance) error

	// Unregister will unregister this instance from registry
	Unregister(instance ServiceInstance) error

	// GetDefaultPageSize will return the default page size
	GetDefaultPageSize() int

	// GetServices will return the all service names.
	GetServices() *gxset.HashSet

	// GetInstances will return all service instances with serviceName
	GetInstances(serviceName string) []ServiceInstance

	// GetInstancesByPage will return a page containing instances of ServiceInstance
	// with the serviceName the page will start at offset
	GetInstancesByPage(serviceName string, offset int, pageSize int) gxpage.Pager

	// GetHealthyInstancesByPage will return a page containing instances of ServiceInstance.
	// The param healthy indices that the instance should be healthy or not.
	// The page will start at offset
	GetHealthyInstancesByPage(serviceName string, offset int, pageSize int, healthy bool) gxpage.Pager

	// GetRequestInstances gets all instances by the specified service names
	GetRequestInstances(serviceNames []string, offset int, requestedSize int) map[string]gxpage.Pager

	// AddListener adds a new ServiceInstancesChangedListenerImpl
	// see addServiceInstancesChangedListener in Java
	AddListener(listener ServiceInstancesChangedListener) error
}

ServiceDiscovery is the interface that wraps common operations of Service Discovery

type ServiceDiscoveryHolder

type ServiceDiscoveryHolder interface {
	// GetServiceDiscovery get service discovery
	GetServiceDiscovery() ServiceDiscovery
}

ServiceDiscoveryHolder is the interface of getting a service discovery it always be a service discovery registry

type ServiceEvent

type ServiceEvent struct {
	Action  remoting.EventType
	Service *common.URL

	KeyFunc KeyFunc
	// contains filtered or unexported fields
}

ServiceEvent includes create, update, delete event

func (*ServiceEvent) Key

func (e *ServiceEvent) Key() string

Key generates the key for service.Key(). It is cached once.

func (*ServiceEvent) String

func (e *ServiceEvent) String() string

String return the description of event

func (*ServiceEvent) Update

func (e *ServiceEvent) Update(url *common.URL)

Update updates the url with the merged URL. Work with Updated() can reduce the process of some merging URL.

func (*ServiceEvent) Updated

func (e *ServiceEvent) Updated() bool

Updated checks if the url is updated. If the serviceEvent is updated, then it don't need merge url again.

type ServiceInstance

type ServiceInstance interface {

	// GetID will return this instance's id. It should be unique.
	GetID() string

	// GetServiceName will return the serviceName
	GetServiceName() string

	// GetHost will return the hostname
	GetHost() string

	// GetPort will return the port.
	GetPort() int

	// IsEnable will return the enable status of this instance
	IsEnable() bool

	// IsHealthy will return the value represent the instance whether healthy or not
	IsHealthy() bool

	// GetMetadata will return the metadata
	GetMetadata() map[string]string

	// ToURLs will return a list of url
	ToURLs(service *common.ServiceInfo) []*common.URL

	// GetEndPoints will get end points from metadata
	GetEndPoints() []*Endpoint

	// Copy will return a instance with different port
	Copy(endpoint *Endpoint) ServiceInstance

	// GetAddress will return the ip:Port
	GetAddress() string

	// SetServiceMetadata saves metadata in instance
	SetServiceMetadata(info *common.MetadataInfo)

	// GetTag will return the tag of the instance
	GetTag() string
}

ServiceInstance is the interface which is used for service registration and discovery.

type ServiceInstanceCustomizer

type ServiceInstanceCustomizer interface {
	gxsort.Prioritizer

	Customize(instance ServiceInstance)
}

ServiceInstanceCustomizer is an extension point which allow user using custom logic to modify instance. Be careful of priority. Usually you should use number between [100, 9000] other number will be thought as system reserve number

type ServiceInstancesChangedEvent

type ServiceInstancesChangedEvent struct {
	observer.BaseEvent
	ServiceName string
	Instances   []ServiceInstance
}

ServiceInstancesChangedEvent represents service instances make some changing

func NewServiceInstancesChangedEvent

func NewServiceInstancesChangedEvent(serviceName string, instances []ServiceInstance) *ServiceInstancesChangedEvent

NewServiceInstancesChangedEvent will create the ServiceInstanceChangedEvent instance

func (*ServiceInstancesChangedEvent) String

String return the description of the event

type ServiceInstancesChangedListener

type ServiceInstancesChangedListener interface {
	// OnEvent on ServiceInstancesChangedEvent the service instances change event
	OnEvent(e observer.Event) error
	// AddListenerAndNotify add notify listener and notify to listen service event
	AddListenerAndNotify(serviceKey string, notify NotifyListener)
	// RemoveListener remove notify listener
	RemoveListener(serviceKey string)
	// GetServiceNames return all listener service names
	GetServiceNames() *gxset.HashSet
	// Accept return true if the name is the same
	Accept(e observer.Event) bool
	// GetEventType returns ServiceInstancesChangedEvent
	GetEventType() reflect.Type
	// GetPriority returns -1, it will be the first invoked listener
	GetPriority() int
}

ServiceInstancesChangedListener is the interface of the Service Discovery Changed Event Listener

type ServiceMappingChangeEvent added in v3.1.0

type ServiceMappingChangeEvent struct {
	observer.BaseEvent
	ServiceKey   string
	ServiceNames *gxset.HashSet
}

func NewServiceMappingChangedEvent added in v3.1.0

func NewServiceMappingChangedEvent(serviceKey string, serviceNames *gxset.HashSet) *ServiceMappingChangeEvent

NewServiceMappingChangedEvent will create the ServiceMappingChangeEvent

func (*ServiceMappingChangeEvent) GetServiceKey added in v3.1.0

func (sm *ServiceMappingChangeEvent) GetServiceKey() string

func (*ServiceMappingChangeEvent) GetServiceNames added in v3.1.0

func (sm *ServiceMappingChangeEvent) GetServiceNames() *gxset.HashSet

Directories

Path Synopsis
Package directory implements registry around file system.
Package directory implements registry around file system.
Package etcdv3 implements registry around etcd.
Package etcdv3 implements registry around etcd.
Package nacos implements registry around Nacos.
Package nacos implements registry around Nacos.
Package polaris implements registry around polaris.
Package polaris implements registry around polaris.
Package zookeeper implements registry around zookeeper.
Package zookeeper implements registry around zookeeper.

Jump to

Keyboard shortcuts

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