Releases: centrifugal/centrifuge
v0.36.2
v0.36.1
v0.36.0
What's Changed
- Add
Controller
interface by @FZambia in #467 - cross-node communication may be not a part ofBroker
now - Fix
concurrent map iteration and write
panic by @FZambia in #473 - the panic could happen during issues with Redis - Add
FlushLatestPublication
option forChannelBatchConfig
by @FZambia in #471 - this is nice to save bandwidth in channels where the loss of intermediary messages is acceptable and beneficial - Possibility to provide version and version epoch fields for publication by @FZambia in #472 - drop unordered messages on Centrifuge Broker level, can be useful in channels where the entire state is send in every
Publication
- Possibility to register custom client timer scheduler by @FZambia in #474
- Remove one alloc on subprotocol selection by @FZambia in #476 - speed ups WebSocket upgrades a bit
- Channel level batching: keep latest publication separate by @FZambia in #479 - makes per-channel batching more memory effective since Centrifuge only keeps latest publication in the intermediary buffer
- Use
base64.StdEncoding.AppendEncode
inencodeAcceptKey
by @FZambia in #481 - simplifies code a bit by using a new helper from Go std lib.
❯ gorelease -base v0.35.0 -version v0.36.0
# github.com/centrifugal/centrifuge
## incompatible changes
(*MemoryBroker).PublishControl: removed
(*MemoryBroker).Run: removed
(*RedisBroker).Run: removed
Broker.PublishControl: removed
Broker.RegisterBrokerEventHandler: added
Broker.Run: removed
BrokerEventHandler.HandleControl: removed
## compatible changes
(*MemoryBroker).RegisterBrokerEventHandler: added
(*Node).SetController: added
(*RedisBroker).RegisterBrokerEventHandler: added
(*RedisBroker).RegisterControlEventHandler: added
ChannelBatchConfig.FlushLatestPublication: added
Config.ClientTimerScheduler: added
ControlEventHandler: added
Controller: added
PublishOptions.Version: added
PublishOptions.VersionEpoch: added
TimerCanceler: added
TimerScheduler: added
WithVersion: added
# summary
v0.36.0 is a valid semantic version for this release.
Full Changelog: v0.35.0...v0.36.0
v0.35.0
What's Changed
- Support
rediss://
scheme in Redis address and autodetect Redis Cluster by @FZambia in #463. Modern cloud providers usually provideredis://host:port
orrediss://host:port
URLs to users, which may correspond to either standalone Redis or Redis Cluster under the hood. Things should now work out of the box for Centrifuge users when using this string as the Redisaddress
, making Centrifuge RedisBroker
more cloud-friendly. - Per channel writer for per channel batching by @FZambia in #466 - experimental API for joining messages on channel level. Enabling batching on channel level adds overhead since messages go through additional buffers for every connection. But at the same time in channels with many messages per second it can actually result into drastically reduced CPU usage since less syscalls are being made.
- Up rueidis to v1.0.56, min Go version 1.23 by @FZambia in #468
❯ gorelease -base v0.34.4 -version v0.35.0
# github.com/centrifugal/centrifuge
## compatible changes
ChannelBatchConfig: added
Config.GetChannelBatchConfig: added
# summary
v0.35.0 is a valid semantic version for this release.
Full Changelog: v0.34.4...v0.35.0
v0.34.4
What's Changed
- Cache preflight requests by @FZambia in #461 - this allows to reduce number of preflight requests in cross-origin bidirectional emulation scenarios for http_stream and emulation endpoints. Good to reduce total number of requests and get only one RTT instead of two. Cache value used is 300 seconds.
- Return 204 instead of 200 for preflight requests
- Document
http.ResponseController
usage in emulation transports - Downgrade rueidis to v1.0.53 to avoid auth errors when forcing RESP2 (should be fixed in the next rueidis version)
Full Changelog: v0.34.3...v0.34.4
v0.34.3
What's Changed
- Unidirectional transports: optimizations and delta encoding support enabler by @FZambia in #459
- Add Valkey (standalone and cluster) to integration tests by @FZambia in #460
- Only redact non-empty tokens by @FZambia in #455
- Fix not using redis prefix for xrange support check by @FZambia in #456
- Redact Connect.Headers values by @FZambia in #458
Full Changelog: v0.34.2...v0.34.3
❯ gorelease -base v0.34.2 -version v0.34.3
# github.com/centrifugal/centrifuge
## compatible changes
(*Client).ProtocolConnect: added
(*Client).ProtocolConnectNoErrorToDisconnect: added
ConnectRequest.Headers: added
v0.34.2
v0.34.1
v0.34.0 💻✨🔮✨💻
Centrifuge v0.34.0 aimed to be the base for Centrifugo v6 which was recently released. That's why a new release of Centrifuge contains notable improvements, new features and some breaking changes (nothing dramatic, should be super-simple to adopt, marked with
Support for sharded PUB/SUB in Redis Cluster
Support for sharded PUB/SUB in Redis Cluster. Please carefully read a comment for RedisBrokerConfig.NumShardedPubSubPartitions
– the feature, while can be a great performance booster in Redis Cluster, may be really niche at the same time since it does not come for free and requires careful consideration before enabling.
The thing is that it reduces the number of shards in Redis Cluster to NumShardedPubSubPartitions
number, and maintains a separate connection with each partition for effective PUB/SUB and guarantee that Centrifuge properly works with Redis Cluster shards.
See also addition discussion in issues/228 and information in Centrifugo release post.
Leverage Redis replicas
It's now possible to utilize Redis replicas in Redis cluster and Redis Sentinel setups to delegate channel subscriptions to them and delegate reading presence to them. To enable use RedisShardConfig.ReplicaClientEnabled
and RedisBrokerConfig.SubscribeOnReplica
/RedisPresenceManagerConfig.ReadFromReplica
options.
Using replicas may help you staying on lower resources if you already have HA Redis setup!
Any Redis setup via address string
Possibility to use Redis address with special schemes redis+cluster://
and redis+sentinel://
so that it's now possible to fully configure any Redis configuration by using a single string.
Examples for single Redis, Redis Cluster, Redis Sentinel:
redis://user:password@127.0.0.1:6379/0
redis+cluster://127.0.0.1:7000
redis+sentinel://localhost:26379?sentinel_master_name=mymaster
Channel namespace resolution for metrics
Now channel namespace resolution of metrics (achievable using GetChannelNamespaceLabel
func) works for all metrics related to channels. Internally we added Centrifuge-level cache to speed up getting the channel namespace label, but still please keep GetChannelNamespaceLabel
fast since Centrifuge cache expires from time to time.
ChannelNamespaceLabelForTransportMessagesReceived
and ChannelNamespaceLabelForTransportMessagesSent
were removed to simplify channel namespace resolution configuration – it will just work for all metrics once GetChannelNamespaceLabel
func provided in the configuration.
Redis benchmark tool
New Redis benchmark tool allows to put Centrifuge specific load on Redis setup.
Headers emulation
Centrifuge now has headers emulation support. See ConnectEvent.Headers
.
In Centrifugo v6 this field is used to transfer headers natively in proxy requests to the backend, but when using Centrifuge library it's up to developer to decide how to use the headers map.
New metrics
Added a bunch of new useful metrics. Like client connections inflight and client subscriptions inflight. Those may give you great observability insights previously missing.
MetricsConfig
struct, it may require developer to update how Centrifuge config is created.
Other changes
- Tarantool integration example was removed as we plan to stop working on related repositories. See in blog post
⚠️ Removed transport connect counter metric. It's simpler to use client connect frame count metric to achieve the same but in a manner unified for all transport implementations.- Adding a way to provide Centrifuge a custom
prometheus.RegistererGatherer
- Better logging for Redis Broker, with possibility to set
RedisBrokerConfig.Name
to distinguish log entries when multiple brokers are used. ⚠️ Logging methods are private now – this was a legacy from previous work when we were decoupling Centrifuge in a separate library from Centrifugo. Now it's not possible to add new Centrifuge log entry from outside, applications must use their own logging.- Up to rueidis v1.0.53 by @FZambia in #448
Gorelease report for v0.33.6..v0.34.0
❯ gorelease -base v0.33.6 -version v0.34.0
# github.com/centrifugal/centrifuge
## incompatible changes
(*Node).Log: removed
(*Node).LogEnabled: removed
Config.ChannelNamespaceLabelForTransportMessagesReceived: removed
Config.ChannelNamespaceLabelForTransportMessagesSent: removed
Config.GetChannelNamespaceLabel: removed
Config.MetricsNamespace: removed
NewLogEntry: removed
## compatible changes
Config.Metrics: added
ConnectEvent.Headers: added
LogEntry.Error: added
MetricsConfig: added
RedisBrokerConfig.Name: added
RedisBrokerConfig.NumShardedPubSubPartitions: added
RedisBrokerConfig.SubscribeOnReplica: added
RedisPresenceManagerConfig.ReadFromReplica: added
RedisShardConfig.ReplicaClientEnabled: added
RegistererGatherer: added
# summary
v0.34.0 is a valid semantic version for this release.
Full Changelog: v0.33.6...v0.34.0