-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
area-health-checksHealth checks and readiness probesHealth checks and readiness probesarea-observabilityTelemetry, metrics, and tracingTelemetry, metrics, and tracingcomplexity-highComplexity: HighComplexity: HighenhancementNew feature or requestNew feature or requestnew-packageRequires creating a new NuGet packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featuresPhase 2: Functionality - new featurespriority-mediumPriority: Medium (⭐⭐⭐)Priority: Medium (⭐⭐⭐)
Milestone
Description
Summary
Create comprehensive health check implementations for all Encina stores and providers.
Motivation
Health checks are essential for:
- Kubernetes: Liveness and readiness probes
- Load Balancers: Instance health detection
- Monitoring: Proactive alerting
- Self-Healing: Auto-recovery triggers
Proposed Solution
Store Health Checks
// Outbox Store Health Check
public class OutboxStoreHealthCheck : IHealthCheck
{
public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context, CancellationToken ct)
{
try
{
await _store.GetPendingCountAsync(ct);
return HealthCheckResult.Healthy();
}
catch (Exception ex)
{
return HealthCheckResult.Unhealthy("Outbox store unavailable", ex);
}
}
}Transport Health Checks
// Kafka Health Check
public class KafkaHealthCheck : IHealthCheck
{
public async Task<HealthCheckResult> CheckHealthAsync(...)
{
// Check broker connectivity
// Check topic existence
}
}Health Checks to Implement
| Category | Health Checks |
|---|---|
| Stores | Outbox, Inbox, Saga, ScheduledMessage, DeadLetter, RoutingSlip, Choreography, Tenant, AuditLog |
| Transports | Kafka, RabbitMQ, Azure Service Bus, Amazon SQS, NATS, MQTT, Redis Streams |
| Databases | All 13 providers |
| Caching | Redis, Memory |
| External | Schema Registry, Secrets, Feature Flags, Service Discovery |
Registration
services.AddHealthChecks()
.AddEncinaOutboxHealthCheck()
.AddEncinaInboxHealthCheck()
.AddEncinaKafkaHealthCheck()
.AddEncinaSqlServerHealthCheck();Alternatives Considered
-
Use AspNetCore.Diagnostics.HealthChecks library: Popular community package with many pre-built health checks. However, Encina-specific stores and patterns require custom implementations that understand our abstractions.
-
Rely on infrastructure-level health checks only: Could use database connectivity checks at infrastructure level, but this misses application-specific health like message backlog size or saga timeout detection.
Affected Packages
- Encina (core)
- Encina.EntityFrameworkCore
- Encina.Dapper.*
- Encina.ADO.*
- Encina.AspNetCore
- Encina.OpenTelemetry
- Encina.Caching.*
- Other: Encina.HealthChecks (new package), all transport packages
Additional Context
Acceptance Criteria
- Health check base class with common patterns
- Store health checks (all stores)
- Transport health checks (all transports)
- Database health checks (all 13 providers)
- External service health checks
- Degraded state support
- Configurable timeouts
- ServiceCollection extensions
- Unit tests
- Documentation
Package Dependencies
Microsoft.Extensions.Diagnostics.HealthChecks
Related Issues
- All store implementation issues
- All transport implementation issues
Metadata
Metadata
Assignees
Labels
area-health-checksHealth checks and readiness probesHealth checks and readiness probesarea-observabilityTelemetry, metrics, and tracingTelemetry, metrics, and tracingcomplexity-highComplexity: HighComplexity: HighenhancementNew feature or requestNew feature or requestnew-packageRequires creating a new NuGet packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featuresPhase 2: Functionality - new featurespriority-mediumPriority: Medium (⭐⭐⭐)Priority: Medium (⭐⭐⭐)