Redis ‐ Redis Streams - thought-corner/Backend-PlayGround GitHub Wiki

Redis - Redis Streams

1. 메시지 발행 및 전달(Production)

  • Producer → Stream(XADD) : 생산자가 데이터를 스트림에 넣는다.
  • Consumer → Stream(XREADGROUP) : 소비자가 Consumer Group에 온 새로운 메시지를 소비한다.
  • 메시지 전달 & PEL 기록 : 메시지를 전달함과 동시에 PEL(Pending Entries List)이라는 대기 목록에 해당 메시지 ID를 기록한다. 이 PEL의 역할은 해당 메시지가 어떤 소비자에게 전달되었고 아직 다 읽었다는 확인을 못 받았다는 상태를 저장한다.

2. 메시지 처리(Processing)

  • 소비자가 전달받은 메시지를 가지고 실제 비즈니스 로직을 수행한다.
  • 처리 성공 케이스 로직
    • Consumer → Stream(XACK) : 소비자가 처리를 완벽히 끝내고 메시지를 확인했다고 알린다.
    • PEL에서 제거 : 레디스는 그제야 PEL에서 해당 메시지 ID를 지운다. 이로써 이 메시지의 생명주기는 완벽히 종료된다.
  • 처리 실패 또는 타임아웃 케이스 로직
    • 메시지가 PEL에 남음 : 시간이 지나도 XACK가 오지 않으면 해당 메시지는 계속 PEL에 머물러 있다.
    • 다른 Consumer → Stream(XCLAIM) : 다른 소비자가 소유권을 이전해서 다시 처리한다고 선언한다.
    • 재처리 : 새로운 소비자가 메시지를 다시 처리하고 최종적으로 XACK을 보내 생명주기를 끝낸다.