rRedis ストリーム

circle-info

SocketIO4J は Redisson クライアントを使用して Redis サーバーに接続します。Valkey や DragonflyDB のような代替の Redis 互換バックエンドもサポートされる可能性があります。

この RedisStreamEventStore は、SocketIO4J のための分散ストリーミングイベントストアを提供します(使用技術: Redis Streams(XADD / XREAD))。 これにより、複数のサーバーインスタンス間でイベントを同期して水平スケーリングを可能にし、内部状態、ルームメンバーシップ、その他の分散操作がノード間で一貫して維持されます。

Redis Reliable Pub/Sub は耐久性のため内部で Streams を使用しますがオフセットを公開しません。一方 Redis Streams はオフセットを直接公開するため、制御されたリプレイや接続状態の復元機能(開発予定)が可能になります。

主な特徴

  • 分散ストリーミング — イベントをすべてのアクティブなノードに配信するために Redis Streams を使用します

  • イベントリプレイの継続性 — ストリーム履歴に最近のイベントを保存し、制御されたリプレイを可能にします

  • イベント種別ごとのオフセット追跡 — 各イベント種別が独自の最終確認済み StreamMessageId

  • ストリーミングディスパッチ — Netty のイベントループをブロックせず非同期にイベントを処理します

  • 重複防止 — 同一ノードで生成されたイベントはフィルタリングされます( nodeId

動作概要

  • すべてのパブリッシュで XADD を Redis ストリームに実行します(モードにより単一ストリームまたは種別ごとのストリーム)

  • 各イベント種別は独自の読み取りオフセットを維持します(使用されるのは StreamMessageId

  • ポーリングはイベント種別ごとに専用のスケジュール実行スレッドで行われます

  • 各読み取り(XREAD)では、最後に処理した id より新しいオフセットのメッセージのみが処理されます

  • イベントはリスナーに配信されるのは、 別のノードから来た場合のみです

  • エラーやストリームタイムアウト時にはリトライが自動的にスケジュールされます

モード

モード
動作
いつ使うか

MULTI_CHANNEL

イベント種別ごとに分離された Redis ストリーム

デフォルト;イベントトラフィックを分離して競合を減らします

SINGLE_CHANNEL

すべてのイベントを ALL_SINGLE_CHANNEL

ノード間で全イベント種別のグローバルな順序付けが必要な場合

利点

👍 マルチノード構成に適している 👍 ストリーム長に応じて一時的なサブスクライバーダウンを乗り切れる可能性がある 👍 提供するのは オフセットベースの配信 👍 再起動後の新しいイベントの制御されたリプレイをサポート(接続状態復元機能は開発中で、現時点ではメッセージのオフセットが取得できます) 👍 外部ブローカーを使わずコアの Redis Streams プリミティブを使用します

制限事項

ℹ️ コンシューマーはメッセージを独立して処理するため、順序はストリーム単位でありグローバルではありません ℹ️ 再起動やオフセット境界の競合で重複配信が発生する可能性があります ℹ️ Redis Streams のサポートが必要(従来の Redis Pub/Sub モードとは互換性がありません)

配信保証: 少なくとも一度配信のセマンティクス — イベントリスナーは重複メッセージを扱えるよう冪等である必要があります。

最終更新

役に立ちましたか?