rRedis 信頼性の高い Pub/Sub

circle-info

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

その RedissonPubSubReliableEventStore 分散型、 再生可能な socketio4j向けのイベントストアを提供します(使用技術: Redis StreamsでバックされたRedis Reliable Topics)。 マルチノード同期をサポートし、メモリ使用量を制御するためのオプションのストリームトリミングを備え、サーバー再起動時の永続性を確保しつつほぼリアルタイムでイベントを配信します。

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

主な特徴

  • Redis Streamsによる信頼性の高い配信 — 再生を制御するために最近のメッセージを保持します

  • ストリームでバックされたトピックRReliableTopic はメッセージを永続化し、遅れて購読した加入者にも配信されることを保証します

  • オプションの自動トリミング — スケジュールされた操作を使って無制限のストリーム成長を防ぎます XTRIM

  • 非同期ディスパッチ — 配信コールバックはNettyのイベントループ外で実行されます

  • 重複防止 — 自身で生成したイベントをフィルタリングします(via) nodeId

仕組み

  • publish0 イベントを 信頼性トピックに書き込みます。内部的にはRedisストリームに追記されます

  • subscribe0 信頼性トピックにリスナーを登録します;再接続後も基盤となるストリームからイベントはプルされます

  • ストリームエントリは定期的に streamMaxLength および trimEvery

  • に基づいてトリミングされます トリミングはI/Oをブロックしないようデーモンスレッドで非同期に実行されます

  • ストリームメタデータ(activePubTopics, activeSubTopics, trimTopics)はイベントタイプごとに追跡されます

モード

モード
動作
使用するタイミング

MULTI_CHANNEL

イベントタイプごとのストリーム + 信頼性トピック

デフォルト;イベントタイプごとにトラフィックを分離し順序を維持します

SINGLE_CHANNEL

すべてのイベントを単一の信頼性ストリームにルーティング

厳格なグローバル順序が必要な場合に

利点

👍 メッセージはRedisストリームに永続化される — トリム制限まで回復可能 👍 適用先: 耐久性を伴うマルチノード同期 👍 オプションのトリミングで無制限のメモリ使用を防げる 👍 再接続後に最近のメッセージを(トリム範囲内で)再生できる 👍 慣れたRedisの展開モデルでKafka/NATSは不要

制限事項

ℹ️ 完全な完全一回実行(exactly-once)ではない — 再起動や再接続後に重複が発生する可能性があります ℹ️ 順序はストリーム単位です — イベント間の順序を保証するには単一チャネルモードが必要です ℹ️ Redis Streamsのサポートが必要(Redis 5+) ℹ️ 信頼性はストリーム保持設定とトリミング戦略に依存します

配信保証: 少なくとも一回配信(At-least-once)セマンティクス — リスナーは潜在的な重複配信に対応できるよう冪等である必要があります。

最終更新

役に立ちましたか?