RabbitMQ_HealthCheck: QueueInfo ignores management API snake_case fields #798

Open
opened 2026-07-22 09:25:37 +00:00 by spikerj · 0 comments
Owner

Summary

RabbitMQ_HealthCheck deserializes /api/queues/detailed into QueueInfo with only PropertyNameCaseInsensitive = true. The RabbitMQ management API returns snake_case (messages_ready, messages_unacknowledged, idle_since, …), which does not bind to MessagesReady / MessagesUnacknowledged / IdleSince.

Impact

  • totalReadyMessages stays 0 for real payloads → the “ready > 1000 → Degraded” gate never fires.
  • idleQueues stays empty → idle reporting is blank.
  • Unacked totals are similarly wrong (though DLQ depth still works because it uses messages).

Repro

Pinned characterization: RabbitMqHealthCheckTests.CheckHealthAsync_SnakeCaseReadyMessages_Ignored_Characterization798 on test/coverage-wave-2026-07.

Fix

Add [JsonPropertyName("messages_ready")] (etc.) on QueueInfo, or use a snake_case naming policy / source-generated DTO matching the management API.

## Summary `RabbitMQ_HealthCheck` deserializes `/api/queues/detailed` into `QueueInfo` with only `PropertyNameCaseInsensitive = true`. The RabbitMQ management API returns **snake_case** (`messages_ready`, `messages_unacknowledged`, `idle_since`, …), which does **not** bind to `MessagesReady` / `MessagesUnacknowledged` / `IdleSince`. ## Impact - `totalReadyMessages` stays `0` for real payloads → the “ready > 1000 → Degraded” gate never fires. - `idleQueues` stays empty → idle reporting is blank. - Unacked totals are similarly wrong (though DLQ depth still works because it uses `messages`). ## Repro Pinned characterization: `RabbitMqHealthCheckTests.CheckHealthAsync_SnakeCaseReadyMessages_Ignored_Characterization798` on `test/coverage-wave-2026-07`. ## Fix Add `[JsonPropertyName("messages_ready")]` (etc.) on `QueueInfo`, or use a snake_case naming policy / source-generated DTO matching the management API.
Sign in to join this conversation.