pubsub_config
Redis 構成と Pub/Sub の関係
Redis 開発者教育の申込
|
Redis 定期点検/技術サポートRedis Technical Support |
Redis エンタープライズサーバーRedis Enterprise Server |
|---|
Redis 構成と Pub/Sub の関係
スタンドアロン(Standalone)構成
Publish/Subscribe がどちらも正しく処理されます。
マスター/レプリカ(Master/Replica)構成
- 同じサーバー(Master/Replica)内ではメッセージを伝播し、戻り値も受けます。
> publish ch01 Msg
(integer) 1 - Redis Master -> Replica: publish msg を伝播します。ただし戻り値は渡せません。
> publish ch01 Msg
(integer) 0
- Replica -> Master, Replica_1 -> Replica_2: publish msg を伝播しません。
[注意] Java Lettuce/Spring はマスター/レプリカ構成をサポートしません。
[Spring Boot 3.1.7, Lettuce 6.2.7, Redis 7.2.3 基準]
- Java Lettuce MasterReplica (StatefulRedisMasterReplicaConnection) は Pub/Sub をサポートしません。 その接続(connection)には publish, subscribe メソッドがありません。
- Java Spring RedisStaticMasterReplicaConfiguration は Pub/Sub をサポートしません。
次のように "サポートしない" という Exception が発生し、次のようなメッセージを受けます。
"Pub/Sub connections not supported with Master/Replica configurations"
Java Source: /org/springframework/data/redis/connection/lettuce/
StaticMasterReplicaConnectionProvider.java
Github 関連イシュー 2020年 01月 30日Mark Paluch(Lettuce 開発者) commented
マスター/レプリカの使用は Pub/Sub では動作しません。
第一に、Lettuce にはマスター/レプリカ向けの Pub/Sub 実装がありません。
第二の理由は Redis Standalone または Replica がノード間で Pub/Sub メッセージを伝播しないからです。 これは Redis クラスタでのみ使えます。
したがってあるノードで送ったメッセージを別のノードで受け取れません。
Using Master/Replica isn't going to work with Pub/Sub.
First, there is no Pub/Sub implementation in Lettuce for Master/Replica.
The second reason is that Redis Standalone or Replica does not propagate Pub/Sub messages across nodes.
That's only available in Redis Cluster. So messages sent on one node cannot be received on a different node. We should improve at least the exception and our docs to indicate that Pub/Sub isn't supported.
センチネル(Sentinel)構成
Java Spring で実装する場合 Auto Config または Manual Config (ReadFrom 設定) のどちらでも
Publish/Subscribe が正しく処理されます。
Mark Paluch(Lettuce 開発者)は (without setting ReadFrom) と言い、あたかも ReadFrom を設定すると
PubSub が動作しないかのように述べましたが、よく動作します。
ただし処理はすべてマスターで行います。Application から PubSub 接続はマスターへだけ行います。
クラスタ(cluster)構成
クラスタで Publish するとレプリカを含むすべてのノードへ送ります。
したがってマスターで publish したメッセージをレプリカ(Replica)で subscribe できます。
マスターだけでなくレプリカでも publish できます。レプリカで publish したメッセージをほかの
レプリカで subscribe できます。
Pub/Sub を重要に使うなら Redis クラスタを使ってください。
| Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
| << Pub/Sub Intro | Redis Config & Pub/Sub | Pub/Sub Internal >> |
|---|
Email
返事がかかってなれば、メールでお知らせします。
