Flux Redis
SocketIO4J utilise le client Redisson pour se connecter à un serveur Redis. Des backends compatibles Redis alternatifs tels que Valkey et DragonflyDB peuvent également être pris en charge.
Le RedisStreamEventStore fournit un magasin d'événements distribué et en streaming pour socketio4j en utilisant Redis Streams (XADD / XREAD). Il permet une mise à l'échelle horizontale en synchronisant les événements entre plusieurs instances de serveur afin que l'état interne, l'appartenance aux salons et autres opérations distribuées restent cohérents entre les nœuds.
Le Pub/Sub fiable de Redis utilise les Streams en interne pour la durabilité, mais n'expose pas les offsets ; Redis Streams expose directement les offsets, permettant la lecture contrôlée et la récupération de l'état de connexion (fonctionnalité prévue pour le développement).
Caractéristiques clés
Streaming distribué — utilise Redis Streams pour livrer les événements à tous les nœuds actifs
Continuité de la relecture d'événements — stocke les événements récents dans l'historique du stream, permettant une relecture contrôlée
Suivi des offsets par type d'événement — chaque type d'événement maintient son propre dernier
StreamMessageIdDiffusion en streaming — les événements sont traités de manière asynchrone sans bloquer les boucles d'événements Netty
Prévention des doublons — les événements produits par le même nœud sont filtrés avec
nodeId
Comment ça fonctionne
Chaque publication effectue
XADDvers un stream Redis (unique ou par type selon le mode)Chaque type d'événement maintient son propre offset de lecture en utilisant
StreamMessageIdLe sondage est effectué dans des threads d'exécution planifiés dédiés par type d'événement
Pour chaque lecture (
XREAD), seuls les messages avec des offsets plus récents que le dernier identifiant traité sont pris en chargeLes événements sont livrés aux écouteurs uniquement s'ils provenaient d'un autre nœud
En cas d'erreurs ou de délais d'attente du stream, des tentatives sont planifiées automatiquement
Modes
MULTI_CHANNEL
Stream Redis séparé par type d'événement
Par défaut ; isole le trafic d'événements et réduit la contention
SINGLE_CHANNEL
Tous les événements sont envoyés dans ALL_SINGLE_CHANNEL
Lorsque l'ordre global de tous les types d'événements est requis entre les nœuds
Avantages
👍 Fonctionne bien pour les déploiements multi-nœuds 👍 Les messages peuvent survivre à des interruptions temporaires des abonnés selon la longueur du stream 👍 Fournit livraison basée sur les offsets 👍 Prend en charge la relecture contrôlée des nouveaux événements après les redémarrages (la fonctionnalité de récupération de l'état de connexion est en cours de développement, pour l'instant vous obtiendrez l'offset du message) 👍 Utilise les primitives de base de Redis Streams sans brokers externes
Limitations
ℹ️ Les consommateurs traitent les messages indépendamment — l'ordre est par stream, pas global ℹ️ Risque de livraison en double lors des redémarrages ou des courses aux frontières d'offset ℹ️ Nécessite la prise en charge de Redis Streams (non compatible avec le mode Pub/Sub Redis legacy)
Garantie de livraison : Sémantique au moins une fois — les écouteurs d'événements doivent être idempotents pour gérer d'éventuels messages en double.
Mis à jour
Ce contenu vous a-t-il été utile ?