From 61c6b832e53630922133c6e02e61095c6819d819 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sun, 22 Feb 2026 23:33:49 -0500 Subject: [PATCH] feat: add MaxPending, WriteDeadline options and error constants --- src/NATS.Server/Monitoring/VarzHandler.cs | 2 ++ src/NATS.Server/NatsOptions.cs | 2 ++ src/NATS.Server/Protocol/NatsProtocol.cs | 3 +++ 3 files changed, 7 insertions(+) diff --git a/src/NATS.Server/Monitoring/VarzHandler.cs b/src/NATS.Server/Monitoring/VarzHandler.cs index 036fb92..c872b28 100644 --- a/src/NATS.Server/Monitoring/VarzHandler.cs +++ b/src/NATS.Server/Monitoring/VarzHandler.cs @@ -66,6 +66,8 @@ public sealed class VarzHandler : IDisposable MaxConnections = _options.MaxConnections, MaxPayload = _options.MaxPayload, MaxControlLine = _options.MaxControlLine, + MaxPending = _options.MaxPending, + WriteDeadline = (long)_options.WriteDeadline.TotalNanoseconds, MaxPingsOut = _options.MaxPingsOut, PingInterval = (long)_options.PingInterval.TotalNanoseconds, Start = _server.StartTime, diff --git a/src/NATS.Server/NatsOptions.cs b/src/NATS.Server/NatsOptions.cs index 1aced93..5413fd6 100644 --- a/src/NATS.Server/NatsOptions.cs +++ b/src/NATS.Server/NatsOptions.cs @@ -11,6 +11,8 @@ public sealed class NatsOptions public int MaxPayload { get; set; } = 1024 * 1024; public int MaxControlLine { get; set; } = 4096; public int MaxConnections { get; set; } = 65536; + public long MaxPending { get; set; } = 64 * 1024 * 1024; // 64MB, matching Go MAX_PENDING_SIZE + public TimeSpan WriteDeadline { get; set; } = TimeSpan.FromSeconds(10); public TimeSpan PingInterval { get; set; } = TimeSpan.FromMinutes(2); public int MaxPingsOut { get; set; } = 2; diff --git a/src/NATS.Server/Protocol/NatsProtocol.cs b/src/NATS.Server/Protocol/NatsProtocol.cs index 44a603a..7166180 100644 --- a/src/NATS.Server/Protocol/NatsProtocol.cs +++ b/src/NATS.Server/Protocol/NatsProtocol.cs @@ -6,6 +6,7 @@ public static class NatsProtocol { public const int MaxControlLineSize = 4096; public const int MaxPayloadSize = 1024 * 1024; // 1MB + public const long MaxPendingSize = 64 * 1024 * 1024; // 64MB default max pending public const int DefaultPort = 4222; public const string Version = "0.1.0"; public const int ProtoVersion = 1; @@ -30,6 +31,8 @@ public static class NatsProtocol public const string ErrAuthTimeout = "Authentication Timeout"; public const string ErrPermissionsPublish = "Permissions Violation for Publish"; public const string ErrPermissionsSubscribe = "Permissions Violation for Subscription"; + public const string ErrSlowConsumer = "Slow Consumer"; + public const string ErrNoRespondersRequiresHeaders = "No Responders Requires Headers Support"; } public sealed class ServerInfo