fix(consul): Fix health checks for gRPC services in Docker
- Add gRPC health check support to Consul registry - Services are gRPC-only, not HTTP - Consul was trying HTTP health checks which failed - Now uses gRPC health checks via grpc.health.v1.Health service - Update HealthCheckConfig to support both HTTP and gRPC - Add GRPC field for gRPC service name - Add UseGRPC flag to choose health check type - Default to gRPC for services (use_grpc: true in config) - Fix service address registration in Docker - Services now register with Docker service name (e.g., auth-service) - Allows Consul to reach services via Docker network DNS - Falls back to localhost for local development - Update default.yaml to enable gRPC health checks - Set use_grpc: true - Set grpc: grpc.health.v1.Health This fixes services being deregistered from Consul due to failed HTTP health checks. Services will now pass gRPC health checks.
This commit is contained in:
@@ -29,7 +29,9 @@ type HealthCheckConfig struct {
|
||||
Interval time.Duration // Health check interval
|
||||
Timeout time.Duration // Health check timeout
|
||||
DeregisterAfter time.Duration // Time to wait before deregistering unhealthy service
|
||||
HTTP string // HTTP health check endpoint (e.g., "/healthz")
|
||||
HTTP string // HTTP health check endpoint (e.g., "/healthz") - for HTTP services
|
||||
GRPC string // gRPC health check service name (e.g., "grpc.health.v1.Health") - for gRPC services
|
||||
UseGRPC bool // Whether to use gRPC health checks instead of HTTP
|
||||
}
|
||||
|
||||
// NewRegistry creates a new Consul-based service registry.
|
||||
@@ -68,7 +70,21 @@ func (r *ConsulRegistry) Register(ctx context.Context, service *registry.Service
|
||||
}
|
||||
|
||||
// Add health check if configured
|
||||
if r.config.HealthCheck.HTTP != "" {
|
||||
if r.config.HealthCheck.UseGRPC {
|
||||
// Use gRPC health check for gRPC services
|
||||
// Format: host:port/service or host:port (uses default health service)
|
||||
grpcAddr := fmt.Sprintf("%s:%d", service.Address, service.Port)
|
||||
if r.config.HealthCheck.GRPC != "" {
|
||||
grpcAddr = fmt.Sprintf("%s:%d/%s", service.Address, service.Port, r.config.HealthCheck.GRPC)
|
||||
}
|
||||
registration.Check = &consulapi.AgentServiceCheck{
|
||||
GRPC: grpcAddr,
|
||||
Interval: r.config.HealthCheck.Interval.String(),
|
||||
Timeout: r.config.HealthCheck.Timeout.String(),
|
||||
DeregisterCriticalServiceAfter: r.config.HealthCheck.DeregisterAfter.String(),
|
||||
}
|
||||
} else if r.config.HealthCheck.HTTP != "" {
|
||||
// Use HTTP health check for HTTP services
|
||||
healthCheckURL := fmt.Sprintf("http://%s:%d%s", service.Address, service.Port, r.config.HealthCheck.HTTP)
|
||||
registration.Check = &consulapi.AgentServiceCheck{
|
||||
HTTP: healthCheckURL,
|
||||
|
||||
Reference in New Issue
Block a user