- Publisher 로 부터 Subscriber 에게 끊임없이 전달되는 데이터를 안정적으로 처리하기 위한 방식
✏️ Publisher 와 Subscriber 간의 프로세스
- sub 이 pub 에게
subscribe()
로 구독함
- 구독이 성공하면 sub 에게
onSubscribe
시그널을 보냄
- sub 은 pub 에게
requset
시그널을 보냄
- pub 은 구독자들이게
onNext
시그널을 사용해 데이터를 보냄
- 3번부터 반복됨
- pub 에서 더이상 emit 할 데이터가 없다면
onComplete
시그널을 보냄
⚠️ 이 과정에서 error 가 발생한다면 onError
시그널을 보내면서 프로세스가 종료됨
✏️ Backpressure
- pub 에서 emit 되는 데이터를 sub 에서안정적으로 처리해 과부하가 걸리지 않게 하는 작업
- sub 이
request
를 할 때 적절하게 처리할 수 있는 수준의 데이터 개수를 pub 에게 요청하는 방식
- 이 때
Buffer
는 요청한 데이터를 담는 바구니 역할을 하게 된다.
📍 Reactor 의 Backpressure 전략
- IGNORE
- ERROR
- Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
Exception 을 발생시킴
- DROP
- Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
buffer 밖에서 대기하는 먼저 emit 된 데이터부터 Drop 시키는 전략
- 이때 drop 된 data 는 sub 에게 전달되지 않음
- LATEST
- Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
버퍼 밖에서 대기하는 가장 최근(나중)에 emit 된 데이터부터 버퍼에 채우는 전략
- Drop 은 Buffer 가 가득 찬 시점에 모든 밖에 위치한 데이터를 drop 하지만,
Latest 는 가장 최근에 요청된 데이터만 남기고 drop 하는 차이점이 있다.
- BUFFER
- Downstream 으로 전달할 데이터가 buffer에 가득 찰 경우,
buffer 안의 데이터를 drop 시키는 전략
- BUFFER DROP-LATEST
- Buffer 가 가득 차면 가장 마지막 data 를 drop
- BUFFER DROP-OLDEST
- Buffer 가 가득 차면 가장 처음 data 를 drop