1. Sinks 소개
- Sinks는 Project Reactor 3.4.0에서 도입된 새로운 기능으로, 명령형 프로그래밍 방식으로 리액티브 스트림을 생성하고 관리할 수 있게 해주는 도구입니다.
- 기존의
FluxProcessor
와EmitterProcessor
를 대체하여 더 안전하고 유연한 방식으로 스트림을 다룰 수 있습니다. - Sinks는 스레드 안전성을 보장하며, 동시성 처리에 대한 다양한 전략을 제공합니다.
2. Sinks의 주요 특징
2.1 스레드 안전성
- Sinks는 멀티스레드 환경에서 안전하게 이벤트를 발행할 수 있도록 설계되었습니다.
- 여러 스레드에서 동시에 이벤트를 발행할 때 발생할 수 있는 경쟁 상태를 방지합니다.
- 실패 시 재시도 정책을 설정할 수 있어 더욱 안정적인 동작을 보장합니다.
2.2 다양한 emit 전략
tryEmitNext()
: 즉시 성공 또는 실패를 반환emitNext()
: 성공할 때까지 재시도tryEmitComplete()
: 스트림 종료 시도tryEmitError()
: 에러 발행 시도
3. Sinks의 종류
- Reactor에서 Sinks를 사용하여 프로그래밍 방식으로 signal을 전송할 수 있는 방법은 크게
Sinks.One
과Sinks.Many
로 나눌 수 있습니다.
3.1 Sinks.One
- 단일 요소를 발행하기 위한 Sink입니다.
Mono
와 유사한 동작을 제공합니다.
Sinks.One<String> sink = Sinks.one();
Mono<String> mono = sink.asMono();
sink.tryEmitValue("Hello Reactor!");
tryEmitValue()
: 단일 요소 발행 시도tryEmitError()
: 에러 발행 시도