리액티브 스트림즈 표준 사양을 구현한 구현체 중 하나
Non-Blocking
통신을 지원한다.Backpressure
전략 지원(Subscriber의 처리 속도가 Publihser의 emit 속도를 따라가지 못할 때 적절하게 제어하는 전략)💡 스케줄러는 복잡한 멀티쓰레딩 프로세스를 단순하게 해준다.
subscribeOn()
publishOn()
💡 publishOn()
은 Operator 앞에 여러번 추가할 경우 별도의 쓰레드가 추가로 생성되지만 subscribeOn()
은 여러 번 추가해도 하나의 쓰레드만 추가로 생성된다.
just()
fromStream()
fromIterable()
fromArray()
range()
interval()
empty()
never()
defer()
using()
generate()
create()
FluxSink
라는 람다 파라미터를 가지는 람다 표현식FluxSink
는 Flux나 Mono에서 just(), fromIterable() 같은 데이터 생성 Operator에 데이터소스를 전달하면 내부에서 알아서 데이터를 emit 하는 등의 Sequence를 진행하는 것이 아니라 프로그래밍 방식으로 직접 Signal 이벤트를 발생 시켜서 Sequence를 진행하도록 해주는 기능을 한다./**
* create() Operator기본 예제
*/
@Slf4j
public class CreateExample {
private static List<Integer>source= Arrays.asList(1, 3, 5, 7, 9, 11, 13, 15, 17, 19);
public static void main(String[] args) {
Flux.create((FluxSink<Integer> sink) -> {
sink.onRequest(n -> {
for (int i = 0; i <source.size(); i++) {
sink.next(source.get(i));
}
sink.complete();
});
sink.onDispose(() ->log.info("# clean up"));
}).subscribe(data ->log.info("# onNext: {}", data));
}
}
map()
flatMap()
concat()
collectList()
collectMap()
merge()
zip()
결합
의 의미는 각 Publisher가 emit하는 데이터를 하나씩 전달 받아서 새로운 데이터를 만든 후에 Downstream으로 전달한다는 의미then()
switchIfEmpty()
and()
when()
doOnSubscribe
doOnNext()
doOnError()
doOnCancel()
doFirst()
doOnRequest()
doOnTerminate()
doAfterTerminate()
doOnEach()
doFinally()
log()
filter()
ignoreElements()
distinct()
take()
next()
skip()
sample()
single()
error()
timeout()
onErrorReturn()
onErrorResume()
onErrorMap()
doFinally()
retry()