revoke-registry
Service registry module for the Revoke microservices framework, providing service discovery and health monitoring capabilities.
Features
- Multiple Backends: Support for Consul, etcd, and in-memory implementations
- Service Discovery: Automatic service registration and discovery
- Health Monitoring: Active and passive health checks
- Load Balancing: Integration with various load balancing strategies
- Metadata Support: Attach custom metadata to services
- Watch Support: Real-time updates on service changes
- High Availability: Support for registry clustering
Installation
Add to your Cargo.toml:
[]
= { = "0.1", = ["consul"] }
Feature Flags
memory: In-memory registry (default, useful for testing)consul: HashiCorp Consul integrationetcd: etcd v3 integrationkubernetes: Kubernetes service discoveryfull: Enable all backends
Quick Start
use ;
use ;
use Uuid;
async
Backend Implementations
Memory Registry
In-memory implementation for development and testing:
use MemoryRegistry;
let registry = new;
// Register with TTL
registry.register_with_ttl.await?;
// Get all services
let all_services = registry.list_all_services.await?;
Consul Registry
HashiCorp Consul integration with full feature support:
use ;
use Duration;
let config = ConsulConfig ;
let registry = new.await?;
// Enable health checks
registry.enable_health_check.await?;
etcd Registry
etcd v3 API integration:
use ;
let config = EtcdConfig ;
let registry = new.await?;
// Watch for service changes
let mut watcher = registry.watch.await?;
while let Some = watcher.next.await
Service Discovery Patterns
Client-Side Discovery
use DiscoveryClient;
let discovery = new;
// Get service instance with load balancing
let instance = discovery
.get_instance
.with_load_balancer
.await?;
// Make request to the instance
let url = format!;
Server-Side Discovery
use ServiceResolver;
let resolver = new;
// Resolve service name to address
let endpoint = resolver.resolve.await?;
// Use with HTTP client
let client = new;
let response = client.get.send.await?;
Health Checking
Active Health Checks
use ;
let checker = new;
// HTTP health check
checker.add_check.await?;
// TCP health check
checker.add_check.await?;
// Script health check
checker.add_check.await?;
Passive Health Checks
use PassiveHealthCheck;
let passive_check = new
.failure_threshold // Mark unhealthy after 5 failures
.success_threshold // Mark healthy after 2 successes
.timeout;
// Report request outcome
passive_check.report_success.await;
passive_check.report_failure.await;
// Check health status
let is_healthy = passive_check.is_healthy.await;
Advanced Features
Service Metadata
let mut metadata = new;
metadata.insert;
metadata.insert;
metadata.insert;
metadata.insert;
let service = ServiceInfo ;
// Query by metadata
let services = registry
.query_services
.with_metadata
.with_metadata
.execute
.await?;
Service Groups
use ServiceGroup;
// Create service group
let group = new
.add_service
.add_service
.add_service;
registry.register_group.await?;
// Get all services in group
let services = registry.get_group.await?;
Circuit Breaker Integration
use RegistryCircuitBreaker;
let breaker = new
.failure_threshold
.recovery_timeout;
// Discover with circuit breaker
match breaker.get_service.await
Multi-Region Support
use ;
let regions = vec!;
let registry = new.await?;
// Prefer local region
let services = registry
.get_service
.prefer_region
.await?;
Performance Optimization
Caching
use ;
let cache_config = CacheConfig ;
let cached_registry = new;
// Cached lookups
let services = cached_registry.get_service.await?;
Batch Operations
// Register multiple services
let services = vec!;
registry.register_batch.await?;
// Deregister multiple services
let ids = vec!;
registry.deregister_batch.await?;
// Batch health updates
let updates = vec!;
registry.update_health_batch.await?;
Monitoring and Metrics
use RegistryMetrics;
let metrics = new;
// Get registry statistics
let stats = metrics.get_stats.await?;
println!;
println!;
println!;
// Export Prometheus metrics
let prometheus_metrics = metrics.export_prometheus;
Best Practices
- Service Naming: Use consistent naming conventions (e.g.,
service-name-v1) - Health Checks: Always configure appropriate health checks
- Metadata: Include version, region, and deployment information
- TTL: Set reasonable TTL values for service registration
- Graceful Shutdown: Always deregister services on shutdown
- Connection Pooling: Reuse registry clients across your application
- Error Handling: Implement retry logic for transient failures
Examples
See the examples directory:
basic_registration.rs- Simple service registrationhealth_checks.rs- Health check configurationservice_discovery.rs- Client-side discovery patternsmulti_region.rs- Multi-region deployment