pubsub_config
Redis 구성과 Pub/Sub과의 관계
레디스 개발자 교육 신청 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 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 또는 Maunal Config (ReadFrom 설정) 둘 다
Publish/Subscribe가 제대로 처리된다.
Mark Paluch(Lettuce 개발자)는 (without setting ReadFrom)이라고 해서 마치 ReadFrom을 설정하면
PubSub가 작동하지 않을 것처럼 언급했지만 잘 작동한다.
단 처리는 모두 마스터에서 한다. Application에서 PubSub 연결은 마스터로만 한다.
클러스터(cluster) 구성
클러스터에서 Publish하면 복제를 포함한 모든 노드에게 보낸다.
따라서 마스터에서 publish한 메시지를 복제(Replica)에서 subscribe할 수 있다.
마스터 뿐만 아니라 복제에서도 publish할 수 있다. 복제에서 publish한 메시지를 다른
복제에서 subscribe할 수 있다.
Pub/Sub를 중요하게 사용한다면 레디스 클러스터를 사용하세요.
Clients for Java | Jedis, Lettuce, Redisson | Clients for C | Hiredis |
<< Pub/Sub Intro | Redis Config & Pub/Sub | Pub/Sub Internal >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.