JetStream의 InterestPolicy는 스트림에 등록된 모든 consumer가 ack하면 메시지를 삭제한다.
그런데 consumer마다 FilterSubjects가 다를 때 — 즉, 특정 subject를 구독하지 않는 consumer가 있을 때 — 그 consumer의 존재가 해당 subject 메시지의 삭제 조건에 영향을 주는지 확인한다.
핵심 질문: subject2를 구독하지 않는 ConsumerC가 내려가 있을 때, subject2 메시지는 삭제되는가?
(실제 비즈니스 구성과 같이 복잡한 사례에도 적용을 할려고 일부러 이런 복잡한 시나리오를 구성해서 테스트를 했습니다)
| 항목 | 값 |
|---|---|
| 이름 | multiSubjectSink |
| Subjects | test.subject1, test.subject2, test.subject3 |
| Retention | InterestPolicy |
| Storage | FileStorage |
| Consumer | FilterSubjects | 의미 |
|---|---|---|
| ConsumerA (serviceA) | subject1, subject2 | subject3에는 관심 없음 |
| ConsumerB (serviceB) | subject1, subject2 | subject3에는 관심 없음 |
| ConsumerC (serviceC) | subject1, subject3 | subject2에는 관심 없음 |
subject1 subject2 subject3
serviceA → ✅ ✅ ✗
serviceB → ✅ ✅ ✗
serviceC → ✅ ✗ ✅
시나리오: A, B, C 모두 가동 → subject1·2·3에 각 3개 발행
예상: 각 consumer는 자신의 FilterSubjects에 해당하는 메시지만 수신·ack → 전부 삭제
결과:
Stream.Msgs = 0
ConsumerA: NumPending=0, NumAckPending=0
ConsumerB: NumPending=0, NumAckPending=0
ConsumerC: NumPending=0, NumAckPending=0