Tune Valkey poll: 10-30s window (fits within 60s gateway timeout)

QueueWaitTimeoutSeconds: 5 → 10 (base)
Randomization: [base, 2×base] → [base, 3×base] = random 10-30s

When Pub/Sub is alive: instant delivery (no change).
When Pub/Sub is dead: consumer wakes in 10-30s via semaphore timeout,
reads pending + new messages. 30s worst case < 60s gateway timeout.

Load: 30 services × 1 poll per random(10-30s) = ~1.5 polls/sec.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
master
2026-04-02 12:23:55 +03:00
parent 90a3ef92df
commit a244043e12
2 changed files with 2 additions and 2 deletions

View File

@@ -53,5 +53,5 @@ public class ValkeyTransportOptions
/// Configurable via compose env var <c>VALKEY_QUEUE_WAIT_TIMEOUT</c>.
/// </para>
/// </summary>
public int QueueWaitTimeoutSeconds { get; set; } = 5;
public int QueueWaitTimeoutSeconds { get; set; } = 10;
}

View File

@@ -468,7 +468,7 @@ public sealed class ValkeyMessageQueue<TMessage> : IMessageQueue<TMessage>, INot
var configuredSeconds = _transportOptions.QueueWaitTimeoutSeconds;
var effectiveTimeout = configuredSeconds <= 0
? Timeout.InfiniteTimeSpan
: TimeSpan.FromSeconds(configuredSeconds + Random.Shared.Next(0, configuredSeconds));
: TimeSpan.FromSeconds(configuredSeconds + Random.Shared.Next(0, 2 * configuredSeconds));
// Wait for a pub/sub signal or timeout (fallback for missed notifications).
try