refactor: Align Epic 0 & Epic 1 with true microservices architecture
Refactor core kernel and infrastructure to support true microservices architecture where services are independently deployable. Phase 1: Core Kernel Cleanup - Remove database provider from CoreModule (services create their own) - Update ProvideHealthRegistry to not depend on database - Add schema support to database client (NewClientWithSchema) - Update main entry point to remove database dependency - Core kernel now provides only: config, logger, error bus, health, metrics, tracer, service registry Phase 2: Service Registry Implementation - Create ServiceRegistry interface (pkg/registry/registry.go) - Implement Consul registry (internal/registry/consul/consul.go) - Add Consul dependency (github.com/hashicorp/consul/api) - Add registry configuration to config/default.yaml - Add ProvideServiceRegistry() to DI container Phase 3: Service Client Interfaces - Create service client interfaces: - pkg/services/auth.go - AuthServiceClient - pkg/services/identity.go - IdentityServiceClient - pkg/services/authz.go - AuthzServiceClient - pkg/services/audit.go - AuditServiceClient - Create ServiceClientFactory (internal/client/factory.go) - Create stub gRPC client implementations (internal/client/grpc/) - Add ProvideServiceClientFactory() to DI container Phase 4: gRPC Service Definitions - Create proto files for all core services: - api/proto/auth.proto - api/proto/identity.proto - api/proto/authz.proto - api/proto/audit.proto - Add generate-proto target to Makefile Phase 5: API Gateway Implementation - Create API Gateway service entry point (cmd/api-gateway/main.go) - Create Gateway implementation (services/gateway/gateway.go) - Add gateway configuration to config/default.yaml - Gateway registers with Consul and routes requests to backend services All code compiles successfully. Core services (Auth, Identity, Authz, Audit) will be implemented in Epic 2 using these foundations.
This commit is contained in:
41
pkg/registry/registry.go
Normal file
41
pkg/registry/registry.go
Normal file
@@ -0,0 +1,41 @@
|
||||
// Package registry provides service registry interface for service discovery.
|
||||
package registry
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
// ServiceRegistry is the interface for service discovery and registration.
|
||||
type ServiceRegistry interface {
|
||||
// Register registers a service instance with the registry.
|
||||
Register(ctx context.Context, service *ServiceInstance) error
|
||||
|
||||
// Deregister removes a service instance from the registry.
|
||||
Deregister(ctx context.Context, serviceID string) error
|
||||
|
||||
// Discover returns all healthy instances of a service.
|
||||
Discover(ctx context.Context, serviceName string) ([]*ServiceInstance, error)
|
||||
|
||||
// Watch returns a channel that receives updates when service instances change.
|
||||
Watch(ctx context.Context, serviceName string) (<-chan []*ServiceInstance, error)
|
||||
|
||||
// Health returns the health status of a service instance.
|
||||
Health(ctx context.Context, serviceID string) (*HealthStatus, error)
|
||||
}
|
||||
|
||||
// ServiceInstance represents a service instance in the registry.
|
||||
type ServiceInstance struct {
|
||||
ID string // Unique instance ID
|
||||
Name string // Service name (e.g., "auth-service", "identity-service")
|
||||
Address string // Service address (IP or hostname)
|
||||
Port int // Service port
|
||||
Tags []string // Service tags for filtering
|
||||
Metadata map[string]string // Additional metadata
|
||||
}
|
||||
|
||||
// HealthStatus represents the health status of a service instance.
|
||||
type HealthStatus struct {
|
||||
ServiceID string // Service instance ID
|
||||
Status string // Health status: "healthy", "unhealthy", "critical"
|
||||
Message string // Optional status message
|
||||
}
|
||||
Reference in New Issue
Block a user