Documentation
¶
Index ¶
- type Backend
- type ConsulBackend
- func (b *ConsulBackend) Close() error
- func (b *ConsulBackend) Deregister(ctx context.Context, serviceID string) error
- func (b *ConsulBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
- func (b *ConsulBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
- func (b *ConsulBackend) GetServiceByID(ctx context.Context, serviceID string) (*ServiceInstance, error)
- func (b *ConsulBackend) Health(ctx context.Context) error
- func (b *ConsulBackend) Initialize(ctx context.Context) error
- func (b *ConsulBackend) ListServices(ctx context.Context) ([]string, error)
- func (b *ConsulBackend) Name() string
- func (b *ConsulBackend) Register(ctx context.Context, instance *ServiceInstance) error
- func (b *ConsulBackend) UpdateServiceHealth(ctx context.Context, serviceID string, status HealthStatus) error
- func (b *ConsulBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
- type ConsulConfig
- type EtcdBackend
- func (b *EtcdBackend) Close() error
- func (b *EtcdBackend) Deregister(ctx context.Context, serviceID string) error
- func (b *EtcdBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
- func (b *EtcdBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
- func (b *EtcdBackend) GetServiceByID(ctx context.Context, serviceID string) (*ServiceInstance, error)
- func (b *EtcdBackend) Health(ctx context.Context) error
- func (b *EtcdBackend) Initialize(ctx context.Context) error
- func (b *EtcdBackend) ListServices(ctx context.Context) ([]string, error)
- func (b *EtcdBackend) Name() string
- func (b *EtcdBackend) Register(ctx context.Context, instance *ServiceInstance) error
- func (b *EtcdBackend) UpdateServiceHealth(ctx context.Context, serviceID string, status HealthStatus) error
- func (b *EtcdBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
- type EtcdConfig
- type EurekaConfig
- type HealthStatus
- type KubernetesConfig
- type MDNSBackend
- func (b *MDNSBackend) Close() error
- func (b *MDNSBackend) Deregister(ctx context.Context, serviceID string) error
- func (b *MDNSBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
- func (b *MDNSBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
- func (b *MDNSBackend) Health(ctx context.Context) error
- func (b *MDNSBackend) Initialize(ctx context.Context) error
- func (b *MDNSBackend) ListServices(ctx context.Context) ([]string, error)
- func (b *MDNSBackend) Name() string
- func (b *MDNSBackend) Register(ctx context.Context, instance *ServiceInstance) error
- func (b *MDNSBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
- type MDNSConfig
- type MemoryBackend
- func (b *MemoryBackend) Close() error
- func (b *MemoryBackend) Deregister(ctx context.Context, serviceID string) error
- func (b *MemoryBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
- func (b *MemoryBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
- func (b *MemoryBackend) GetInstanceCount(serviceName string) int
- func (b *MemoryBackend) GetTotalServiceCount() int
- func (b *MemoryBackend) Health(ctx context.Context) error
- func (b *MemoryBackend) Initialize(ctx context.Context) error
- func (b *MemoryBackend) ListServices(ctx context.Context) ([]string, error)
- func (b *MemoryBackend) Name() string
- func (b *MemoryBackend) Register(ctx context.Context, instance *ServiceInstance) error
- func (b *MemoryBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
- type ServiceInstance
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Backend ¶
type Backend interface {
// Name returns the backend name
Name() string
// Initialize initializes the backend
Initialize(ctx context.Context) error
// Register registers a service instance
Register(ctx context.Context, instance *ServiceInstance) error
// Deregister deregisters a service instance
Deregister(ctx context.Context, serviceID string) error
// Discover discovers service instances by name
Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
// DiscoverWithTags discovers service instances by name and tags
DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
// Watch watches for changes to a service
Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
// ListServices lists all registered services
ListServices(ctx context.Context) ([]string, error)
// Health checks backend health
Health(ctx context.Context) error
// Close closes the backend
Close() error
}
Backend defines the interface for service discovery backends
type ConsulBackend ¶
type ConsulBackend struct {
// contains filtered or unexported fields
}
ConsulBackend implements service discovery using Consul
func NewConsulBackend ¶
func NewConsulBackend(config ConsulConfig) (*ConsulBackend, error)
NewConsulBackend creates a new Consul backend
func (*ConsulBackend) Deregister ¶
func (b *ConsulBackend) Deregister(ctx context.Context, serviceID string) error
Deregister deregisters a service instance from Consul
func (*ConsulBackend) Discover ¶
func (b *ConsulBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
Discover discovers service instances by name from Consul
func (*ConsulBackend) DiscoverWithTags ¶
func (b *ConsulBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
DiscoverWithTags discovers service instances by name and tags from Consul
func (*ConsulBackend) GetServiceByID ¶
func (b *ConsulBackend) GetServiceByID(ctx context.Context, serviceID string) (*ServiceInstance, error)
GetServiceByID retrieves a specific service instance by ID
func (*ConsulBackend) Health ¶
func (b *ConsulBackend) Health(ctx context.Context) error
Health checks backend health
func (*ConsulBackend) Initialize ¶
func (b *ConsulBackend) Initialize(ctx context.Context) error
Initialize initializes the backend
func (*ConsulBackend) ListServices ¶
func (b *ConsulBackend) ListServices(ctx context.Context) ([]string, error)
ListServices lists all registered services in Consul
func (*ConsulBackend) Register ¶
func (b *ConsulBackend) Register(ctx context.Context, instance *ServiceInstance) error
Register registers a service instance with Consul
func (*ConsulBackend) UpdateServiceHealth ¶
func (b *ConsulBackend) UpdateServiceHealth(ctx context.Context, serviceID string, status HealthStatus) error
UpdateServiceHealth updates the health status of a service instance
func (*ConsulBackend) Watch ¶
func (b *ConsulBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
Watch watches for changes to a service in Consul
type ConsulConfig ¶
type ConsulConfig struct {
// Address is the Consul agent address
Address string `yaml:"address" json:"address"`
// Token is the Consul ACL token
Token string `yaml:"token" json:"token"`
// Datacenter is the Consul datacenter
Datacenter string `yaml:"datacenter" json:"datacenter"`
// Namespace is the Consul namespace (Enterprise)
Namespace string `yaml:"namespace" json:"namespace"`
// TLS settings
TLSEnabled bool `yaml:"tls_enabled" json:"tls_enabled"`
TLSCAFile string `yaml:"tls_ca_file" json:"tls_ca_file"`
TLSCert string `yaml:"tls_cert" json:"tls_cert"`
TLSKey string `yaml:"tls_key" json:"tls_key"`
}
ConsulConfig holds Consul-specific configuration
type EtcdBackend ¶
type EtcdBackend struct {
// contains filtered or unexported fields
}
EtcdBackend implements service discovery using etcd
func NewEtcdBackend ¶
func NewEtcdBackend(config EtcdConfig) (*EtcdBackend, error)
NewEtcdBackend creates a new etcd backend
func (*EtcdBackend) Deregister ¶
func (b *EtcdBackend) Deregister(ctx context.Context, serviceID string) error
Deregister deregisters a service instance from etcd
func (*EtcdBackend) Discover ¶
func (b *EtcdBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
Discover discovers service instances by name from etcd
func (*EtcdBackend) DiscoverWithTags ¶
func (b *EtcdBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
DiscoverWithTags discovers service instances by name and tags from etcd
func (*EtcdBackend) GetServiceByID ¶
func (b *EtcdBackend) GetServiceByID(ctx context.Context, serviceID string) (*ServiceInstance, error)
GetServiceByID retrieves a specific service instance by ID
func (*EtcdBackend) Health ¶
func (b *EtcdBackend) Health(ctx context.Context) error
Health checks backend health
func (*EtcdBackend) Initialize ¶
func (b *EtcdBackend) Initialize(ctx context.Context) error
Initialize initializes the backend
func (*EtcdBackend) ListServices ¶
func (b *EtcdBackend) ListServices(ctx context.Context) ([]string, error)
ListServices lists all registered services in etcd
func (*EtcdBackend) Register ¶
func (b *EtcdBackend) Register(ctx context.Context, instance *ServiceInstance) error
Register registers a service instance with etcd
func (*EtcdBackend) UpdateServiceHealth ¶
func (b *EtcdBackend) UpdateServiceHealth(ctx context.Context, serviceID string, status HealthStatus) error
UpdateServiceHealth updates the health status of a service instance
func (*EtcdBackend) Watch ¶
func (b *EtcdBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
Watch watches for changes to a service in etcd
type EtcdConfig ¶
type EtcdConfig struct {
// Endpoints are the etcd endpoints
Endpoints []string `yaml:"endpoints" json:"endpoints"`
// Username for etcd authentication
Username string `yaml:"username" json:"username"`
// Password for etcd authentication
Password string `yaml:"password" json:"password"`
// DialTimeout is the timeout for dialing etcd
DialTimeout time.Duration `yaml:"dial_timeout" json:"dial_timeout"`
// KeyPrefix is the etcd key prefix for services
KeyPrefix string `yaml:"key_prefix" json:"key_prefix"`
// TLS settings
TLSEnabled bool `yaml:"tls_enabled" json:"tls_enabled"`
TLSCAFile string `yaml:"tls_ca_file" json:"tls_ca_file"`
TLSCert string `yaml:"tls_cert" json:"tls_cert"`
TLSKey string `yaml:"tls_key" json:"tls_key"`
}
EtcdConfig holds etcd-specific configuration
type EurekaConfig ¶
type EurekaConfig struct {
// URLs are the Eureka server URLs
URLs []string `yaml:"urls" json:"urls"`
// RegistryFetchInterval is how often to fetch the registry
RegistryFetchInterval time.Duration `yaml:"registry_fetch_interval" json:"registry_fetch_interval"`
// InstanceInfoReplicationInterval is how often to replicate instance info
InstanceInfoReplicationInterval time.Duration `yaml:"instance_info_replication_interval" json:"instance_info_replication_interval"`
}
EurekaConfig holds Eureka-specific configuration
type HealthStatus ¶
type HealthStatus string
HealthStatus represents service health status
const ( // HealthStatusPassing indicates the service is healthy HealthStatusPassing HealthStatus = "passing" // HealthStatusWarning indicates the service has warnings HealthStatusWarning HealthStatus = "warning" // HealthStatusCritical indicates the service is unhealthy HealthStatusCritical HealthStatus = "critical" // HealthStatusUnknown indicates the health status is unknown HealthStatusUnknown HealthStatus = "unknown" )
type KubernetesConfig ¶
type KubernetesConfig struct {
// Namespace is the Kubernetes namespace
Namespace string `yaml:"namespace" json:"namespace"`
// InCluster determines if running in-cluster
InCluster bool `yaml:"in_cluster" json:"in_cluster"`
// KubeconfigPath is the path to kubeconfig (if not in-cluster)
KubeconfigPath string `yaml:"kubeconfig_path" json:"kubeconfig_path"`
// ServiceType is the service type to watch (ClusterIP, NodePort, LoadBalancer)
ServiceType string `yaml:"service_type" json:"service_type"`
// LabelSelector is the label selector for filtering services
LabelSelector string `yaml:"label_selector" json:"label_selector"`
}
KubernetesConfig holds Kubernetes-specific configuration
type MDNSBackend ¶
type MDNSBackend struct {
// contains filtered or unexported fields
}
MDNSBackend implements service discovery using mDNS/DNS-SD This works natively on: - macOS (Bonjour) - Linux (Avahi) - Windows (DNS-SD)
func NewMDNSBackend ¶
func NewMDNSBackend(config MDNSConfig) (*MDNSBackend, error)
NewMDNSBackend creates a new mDNS service discovery backend
func (*MDNSBackend) Deregister ¶
func (b *MDNSBackend) Deregister(ctx context.Context, serviceID string) error
Deregister deregisters a service instance
func (*MDNSBackend) Discover ¶
func (b *MDNSBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
Discover discovers service instances by name via mDNS
func (*MDNSBackend) DiscoverWithTags ¶
func (b *MDNSBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
DiscoverWithTags discovers service instances by name and tags
func (*MDNSBackend) Health ¶
func (b *MDNSBackend) Health(ctx context.Context) error
Health checks backend health
func (*MDNSBackend) Initialize ¶
func (b *MDNSBackend) Initialize(ctx context.Context) error
Initialize initializes the backend
func (*MDNSBackend) ListServices ¶
func (b *MDNSBackend) ListServices(ctx context.Context) ([]string, error)
ListServices lists all registered services (local only)
func (*MDNSBackend) Register ¶
func (b *MDNSBackend) Register(ctx context.Context, instance *ServiceInstance) error
Register registers a service instance via mDNS
func (*MDNSBackend) Watch ¶
func (b *MDNSBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
Watch watches for changes to a service via mDNS
type MDNSConfig ¶
type MDNSConfig struct {
// Domain is the mDNS domain (default: "local.")
Domain string `yaml:"domain" json:"domain"`
// Interface is the network interface to use (empty for all interfaces)
Interface string `yaml:"interface" json:"interface"`
// IPv6 enables IPv6 support
IPv6 bool `yaml:"ipv6" json:"ipv6"`
// BrowseTimeout is the timeout for browsing services
BrowseTimeout time.Duration `yaml:"browse_timeout" json:"browse_timeout"`
// TTL is the time-to-live for service records (default: 120 seconds)
TTL uint32 `yaml:"ttl" json:"ttl"`
}
MDNSConfig holds mDNS/DNS-SD-specific configuration
type MemoryBackend ¶
type MemoryBackend struct {
// contains filtered or unexported fields
}
MemoryBackend is an in-memory service discovery backend This is useful for local development and testing
func NewMemoryBackend ¶
func NewMemoryBackend() (*MemoryBackend, error)
NewMemoryBackend creates a new memory backend
func (*MemoryBackend) Deregister ¶
func (b *MemoryBackend) Deregister(ctx context.Context, serviceID string) error
Deregister deregisters a service instance
func (*MemoryBackend) Discover ¶
func (b *MemoryBackend) Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
Discover discovers service instances by name
func (*MemoryBackend) DiscoverWithTags ¶
func (b *MemoryBackend) DiscoverWithTags(ctx context.Context, serviceName string, tags []string) ([]*ServiceInstance, error)
DiscoverWithTags discovers service instances by name and tags
func (*MemoryBackend) GetInstanceCount ¶
func (b *MemoryBackend) GetInstanceCount(serviceName string) int
GetInstanceCount returns the number of instances for a service
func (*MemoryBackend) GetTotalServiceCount ¶
func (b *MemoryBackend) GetTotalServiceCount() int
GetTotalServiceCount returns the total number of registered services
func (*MemoryBackend) Health ¶
func (b *MemoryBackend) Health(ctx context.Context) error
Health checks backend health
func (*MemoryBackend) Initialize ¶
func (b *MemoryBackend) Initialize(ctx context.Context) error
Initialize initializes the backend
func (*MemoryBackend) ListServices ¶
func (b *MemoryBackend) ListServices(ctx context.Context) ([]string, error)
ListServices lists all registered services
func (*MemoryBackend) Register ¶
func (b *MemoryBackend) Register(ctx context.Context, instance *ServiceInstance) error
Register registers a service instance
func (*MemoryBackend) Watch ¶
func (b *MemoryBackend) Watch(ctx context.Context, serviceName string, onChange func([]*ServiceInstance)) error
Watch watches for changes to a service
type ServiceInstance ¶
type ServiceInstance struct {
// ID is the unique service instance ID
ID string `json:"id"`
// Name is the service name
Name string `json:"name"`
// Version is the service version
Version string `json:"version"`
// Address is the service address (IP or hostname)
Address string `json:"address"`
// Port is the service port
Port int `json:"port"`
// Tags are service tags for filtering
Tags []string `json:"tags"`
// Metadata is arbitrary service metadata
Metadata map[string]string `json:"metadata"`
// Status is the service health status
Status HealthStatus `json:"status"`
// LastHeartbeat is the timestamp of the last heartbeat
LastHeartbeat int64 `json:"last_heartbeat"`
}
ServiceInstance represents a registered service instance
func (*ServiceInstance) GetMetadata ¶
func (si *ServiceInstance) GetMetadata(key string) (string, bool)
GetMetadata retrieves metadata by key
func (*ServiceInstance) HasAllTags ¶
func (si *ServiceInstance) HasAllTags(tags []string) bool
HasAllTags checks if the service has all specified tags
func (*ServiceInstance) HasTag ¶
func (si *ServiceInstance) HasTag(tag string) bool
HasTag checks if the service has a specific tag
func (*ServiceInstance) IsHealthy ¶
func (si *ServiceInstance) IsHealthy() bool
IsHealthy checks if the service is healthy
func (*ServiceInstance) URL ¶
func (si *ServiceInstance) URL(scheme string) string
URL returns the full URL for the service instance