Package net.carcdr.yhocuspocus.redis
Class RedisPubSubExtension
java.lang.Object
net.carcdr.yhocuspocus.redis.RedisPubSubExtension
- All Implemented Interfaces:
net.carcdr.yhocuspocus.extension.Extension
public class RedisPubSubExtension
extends Object
implements net.carcdr.yhocuspocus.extension.Extension
Redis extension for horizontal scaling using pub/sub.
This extension synchronizes document updates across multiple server instances using Redis pub/sub. When a document is modified on one instance, the update is published to Redis and received by all other instances subscribed to that document's channel.
Usage:
RedisClient redisClient = new LettuceRedisClient("localhost", 6379);
RedisExtensionConfig config = RedisExtensionConfig.builder()
.prefix("myapp")
.instanceId("instance-1")
.build();
RedisPubSubExtension extension = new RedisPubSubExtension(config, redisClient);
YHocuspocus server = YHocuspocus.builder()
.extension(extension)
.build();
Key behaviors:
- Subscribes to document channel when document is loaded
- Publishes updates to Redis when document changes locally
- Applies updates from other instances to local document
- Filters out self-published messages to avoid duplicate application
- Unsubscribes from channel when document is unloaded
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionRedisPubSubExtension(RedisExtensionConfig config, RedisClient redisClient) Creates a new Redis pub/sub extension. -
Method Summary
Modifier and TypeMethodDescriptionafterLoadDocument(net.carcdr.yhocuspocus.extension.AfterLoadDocumentPayload payload) beforeUnloadDocument(net.carcdr.yhocuspocus.extension.BeforeUnloadDocumentPayload payload) Gets the configuration for this extension.Gets the set of currently subscribed document names.booleanChecks if the Redis client is connected.onChange(net.carcdr.yhocuspocus.extension.OnChangePayload payload) onDestroy(net.carcdr.yhocuspocus.extension.OnDestroyPayload payload) onStoreDocument(net.carcdr.yhocuspocus.extension.OnStoreDocumentPayload payload) intpriority()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface net.carcdr.yhocuspocus.extension.Extension
afterStoreDocument, afterUnloadDocument, onAuthenticate, onConnect, onCreateDocument, onDisconnect, onLoadDocument
-
Constructor Details
-
RedisPubSubExtension
Creates a new Redis pub/sub extension.- Parameters:
config- extension configurationredisClient- Redis client implementation
-
-
Method Details
-
priority
public int priority()- Specified by:
priorityin interfacenet.carcdr.yhocuspocus.extension.Extension
-
afterLoadDocument
public CompletableFuture<Void> afterLoadDocument(net.carcdr.yhocuspocus.extension.AfterLoadDocumentPayload payload) - Specified by:
afterLoadDocumentin interfacenet.carcdr.yhocuspocus.extension.Extension
-
onChange
- Specified by:
onChangein interfacenet.carcdr.yhocuspocus.extension.Extension
-
onStoreDocument
public CompletableFuture<Void> onStoreDocument(net.carcdr.yhocuspocus.extension.OnStoreDocumentPayload payload) - Specified by:
onStoreDocumentin interfacenet.carcdr.yhocuspocus.extension.Extension
-
beforeUnloadDocument
public CompletableFuture<Void> beforeUnloadDocument(net.carcdr.yhocuspocus.extension.BeforeUnloadDocumentPayload payload) - Specified by:
beforeUnloadDocumentin interfacenet.carcdr.yhocuspocus.extension.Extension
-
onDestroy
- Specified by:
onDestroyin interfacenet.carcdr.yhocuspocus.extension.Extension
-
getSubscribedDocuments
-
getConfig
Gets the configuration for this extension.- Returns:
- the configuration
-
isConnected
public boolean isConnected()Checks if the Redis client is connected.- Returns:
- true if connected
-