NATS JetStream은 처리 중인 메시지를 왜 또 보낼까?
NATS 2.15 JetStream에서 처리가 ack_wait보다 길면 같은 메시지가 언제 다른 워커에 다시 오는지 시간으로 재고, in progress로 이를 막는지 확인합니다. 처리 뒤 ack 전에 죽는 경우를 재현해 stream sequence로 중복을 거르는 방법도 봅니다.
@Hong2026-10-14조회 152
NATS 2.15 JetStream에서 처리가 ack_wait보다 길면 같은 메시지가 언제 다른 워커에 다시 오는지 시간으로 재고, in progress로 이를 막는지 확인합니다. 처리 뒤 ack 전에 죽는 경우를 재현해 stream sequence로 중복을 거르는 방법도 봅니다.
NATS 2.15에서 구독자 세 개가 같은 주제를 구독하면 메시지를 모두 받지만, 같은 큐 이름을 붙이면 메시지마다 한 구독자만 무작위로 골라 받는다는 것을 건수로 확인합니다. 처리 중인 구독자가 죽으면 그 몫의 메시지가 다시 전달되지 않고 사라지는 것도 재현합니다.
Core NATS는 받을 구독자가 없으면 메시지를 그대로 버리고, JetStream은 스트림에 저장해 두었다가 나중에 만든 컨슈머에게 보냅니다. NATS 2.15에서 구독 전 발행 손실, 스트림 저장 뒤 수신, interest 보관 정책에서 메시지가 남지 않는 경우를 직접 재현합니다.