I'm pretty new in project-reactor and I need some clarification about events sequencing.
Example 1 (Flux with 2 elements and buffer size == 2) :
Flux.fromStream(IntStream.range(0, 2).boxed()) // Two element in the stream
.doOnSubscribe(subscription -> out.println("OnSubscribe"))
.doOnRequest(l -> out.println("OnRequest"))
.doOnNext(subscription -> out.println("onNext"))
.doOnEach(subscription -> out.println("onEach"))
.doOnComplete(() -> out.println("OnComplete"))
.doOnTerminate(() -> out.println("onTerminate"))
.doAfterTerminate(() -> out.println("doAfterTerminate"))
.doFinally(signalType -> out.println("doFinally"))
.doOnCancel(() -> out.println("onCancel"))
.doOnError(throwable -> out.println("onError"))
.buffer(2) // Buffer size 2
.subscribe(integers -> out.println("Numbers " + integers));
Output 1 :
OnSubscribe
OnRequest
onNext
onEach
onNext
onEach
Numbers [0, 1]
onEach
OnComplete
onTerminate
doFinally
doAfterTerminate
Example 2 (Flux with 3 elements and buffer size == 2):
Flux.fromStream(IntStream.range(0, 3).boxed()) // Three elements here !!!!!
.doOnSubscribe(subscription -> out.println("OnSubscribe"))
.doOnRequest(l -> out.println("OnRequest"))
.doOnNext(subscription -> out.println("onNext"))
.doOnEach(subscription -> out.println("onEach"))
.doOnComplete(() -> out.println("OnComplete"))
.doOnTerminate(() -> out.println("onTerminate"))
.doAfterTerminate(() -> out.println("doAfterTerminate"))
.doFinally(signalType -> out.println("doFinally"))
.doOnCancel(() -> out.println("onCancel"))
.doOnError(throwable -> out.println("onError"))
.buffer(2) // Buffer size 2
.subscribe(integers -> out.println("Numbers " + integers));
Output 2 :
OnSubscribe
OnRequest
onNext
onEach
onNext
onEach
Numbers [0, 1]
onNext
onEach
onEach
OnComplete
onTerminate
Numbers [2]
doFinally
doAfterTerminate
Why in the second example, onComplete was triggered before consumer ending ?
OnComplete
onTerminate
Numbers [2] -> this one ?
I thought that onComplete was triggered when the Flux completes successfully but here, it's not.
I'm little bit confused.