Why architecture matters here

Reactive fails on missing backpressure signals, subtle scheduler bugs, and debug pain. Architecture matters because operators + schedulers compose complex flows.

Advertisement

The architecture: every piece explained

The top strip is the protocol. Publisher emits. Subscription is demand contract. Subscriber handles onNext + onError + onComplete. Backpressure via request(n).

The middle row is composition. Operators transform (map/filter/flatMap). Schedulers pick threading pool. Hot vs cold — shared stream vs per-subscriber. Error handling onError propagates.

The lower rows are practice. Debug + hooks — reactor debug agent. Interop with virtual threads. Ops — testing + observability.

Reactive streams — publisher + subscriber + backpressure + operatorsasync data flow with demand signalingPublisheremits itemsSubscriptiondemand contractSubscriberonNext + onError + onCompleteBackpressurerequest(n)Operatorsmap/filter/flatMapSchedulersthreading poolsHot vs coldshared vs per-subscriberError handlingonError propagationDebug + hooksreactor debug agentInteropwith virtual threadsOps — testing + observability + adoptioncomposeschedulesharehandledebugbridgebridgeoperateoperate
Reactive streams model with backpressure + operators.
Advertisement

End-to-end flow

End-to-end: API request produces a Flux; operators filter + map; scheduler routes on boundedElastic; subscriber consumes on server thread. Backpressure keeps memory bounded even under burst. Errors propagate to error handler.