Have you ever had to orchestrate multiple tasks, some of which are asynchronous, and to compose them together?
As soon as latency comes into play - a database or HTTP request for instance - composing rhymes with complexity.
Worse: one cannot trust the network, and so you generally need to think about timeouts.
Under some conditions, you might also want to cancel part or all of the processing, perform calls in parallel or introduce retries in case of transient errors (preferably without overloading the remote server in a retry storm)...
How to manage all this at various levels of granularity in a callback-based or Future-based system? A recipe for going insane...
One of the added values of Reactive Programming is how timeout, retry and cancel concepts are first class citizens.
It naturally takes their propagation to all of the asynchronous processing pipeline into account.
We will present solutions to these themes based on Reactor, and you’ll see it IS possible to keep your sanity!