Changelog
This release also includes all fixes and improvements from 2.10.26 and earlier.
Go Version
- 1.24.0 (#6508)
Dependencies
- golang.org/x/crypto v0.36.0 (#6618)
- golang.org/x/sys v0.31.0 (#6618)
- golang.org/x/time v0.11.0 (#6618)
- github.com/google/go-tpm v0.9.3 (#6295)
- github.com/antithesishq/antithesis-sdk-go v0.4.3-default-no-op (#6164)
Added
General
- Distributed message tracing (#5014, #5057)
- A message with the
Nats-Trace-Dest
header set to a valid subject will receive events representing what happens to the message as it moves through the system - Events contain information such as ingress, subject mapping, stream exports, service imports, egress to subscriptions, routes, gateways or leafnodes
- An additional
Nats-Trace-Only
header, if set totrue
, will produce the same tracing events but will not deliver the message to the final destination
- A message with the
- Configuration state digest (#4325)
- A hash of the configuration file can be generated using the
-t
option on the command line - The hash of the currently running configuration file can be seen in the
config_digest
option invarz
- A hash of the configuration file can be generated using the
- Enable scoped users to have templates that are not limited to a subject token (#5981)
JetStream
- Per-message TTLs (#6272, #6354, #6363, #6370, #6376, #6385, #6400)
- The
Nats-TTL
header, provided either as a string duration (1m
,30s
) or an integer in seconds, will age out the message independently of stream limits - More information on this is available in ADR-43
- The
- Subject delete markers on
MaxAge
(#6378, #6389, #6393, #6400, #6404, #6428, #6432)- The
SubjectDeleteMarkerTTL
stream configuration option determines whether to place marker messages and how long they should live for - The marker message will have a
Nats-Marker-Reason
header explaining which limit caused the marker to be left behind - More information on this is available in ADR-43
- The
- Pull consumer priority groups with pinning and overflow (#5814, #6078, #6081)
- Allows patterns such as one consumer receiving all messages, but handing over to a second consumer if the first one fails, or groups of clients accessing the same consumer should have different priorities
- The
PriorityGroups
andPriorityPolicy
options in the consumer configuration control the policy - More information on this is available in ADR-42
- Consumer pausing (#5066)
- The
PauseUntil
consumer configuration option suspends message delivery to the consumer until the time specified is reached, after which point it will resume automatically
- The
- Asset versioning (#5850, #5855, #5857)
- More information on this is available in ADR-44
- Multi-get directly from a stream (#5107)
- More information on this is available in ADR-31
- Pedantic mode (#5245)
- Ensures that stream and consumer creates or updates will fail if the resulting configuration would differ due to defaults, useful for desired-state configuration
- Stream ingest rate limiting (#5796)
- New
max_buffered_size
andmax_buffered_msgs
options in thejetstream
block of the server config control how many publishes should be queued before rate-limiting, making it easier to protect the system against Core NATS publishes into JetStream - Where a reply subject is provided, rate-limited messages will receive a 429 “Too Many Requests” response and can retry later
- New
- Support for
Nats-Expected-Last-Subject-Sequence-Subject
header, customising the subject used when paired withNats-Expected-Last-Subject-Sequence
(#5281) Thanks to @cchamplin for the contribution! - Ability to move cluster Raft traffic into the asset account instead of using the system account using the new
cluster_traffic
configuration option (#5466, #5947) - Ability to specify preferred placement tags or clusters using
preferred
when issuing stepdown requests to the metaleader, streams or consumers (#6282, #6484) - Implement strict decoding for JetStream API requests with the new
strict
option in thejetstream
block of the server config (#5858) - JetStream encryption on Windows can now use the TPM for key storage (#5273)
- The
js_cluster_migrate
option can now be configured with a delay, controlling how long before a failure would result in asset migration (#5903)
Leafnodes
WebSocket
- WebSocket custom response headers (#5230) Thanks to @ramonberrutti for the contribution!
MQTT
- SparkplugB Aware support (#5241)
Improved
General
- A graceful shutdown caused by the
SIGTERM
signal will now return exit code 0 instead of exit code 1 (#6336)
Fixed
General
- Server, cluster and gateway names containing spaces will now be rejected, since these can cause issues (#5676)
JetStream
- Message removals due to acks in clustered interest-based or work queue streams are now proposed through Raft (#6140)
- Ensures that the removal ordering across all replicas is consistent, but may increase the amount of replication traffic
- Consistency improvements for the metalayer, streams and consumers (#6194, #6485, #6518)
- A new leader only starts responding to read/write requests once it's initially up-to-date with its Raft log
- Also fixes issues where KV creates/updates to a key during leader changes could desync the stream
- Replicated consumers should no longer skip redeliveries of unacknowledged messages after a leader change (#6566)
- Consumer starting sequence is now always respected, except for consumers used for sources/mirrors (#6253)