General Speaking
- Reactive is used broadly to define event-driven systems
- UI events, network protocols
- Now also entering the domain of application/business logic
- Non-blocking event-driven architecture
Demo1: Demo Simple Reactive can be an excel file as well, if we change the one cell value then all other cell gets updated. This is reactive in its simplest form.
Myths about “Reactive”
- Async/concurrent == reactive?
- Easy to end up with too many threads
- Fill up hand-off queue
- Must be async to be reactive?
- Nope but must be agnostic to source of concurrency
- Reactive is the domain of specific programming languages?
- Language features can help
- E.g. JDK 8 Lambda
Reactive Specification Goals
- Govern the exchange of data across async boundaries
- Use back-pressure for flow control
- Fast sources should not overwhelm slower consumers
- Provide API types, TCK (Technology Compatibility Kit)
Back-Pressure
- When publisher maintains higher rate for extended time
- Queues grow without bounds
- Back-pressure allows a subscriber to control queue bounds
- Subscriber requests # of elements
- Publisher produces up to # of requested
- If source can’t be controlled
- Publisher may buffer or drop
- Must obey # of requested elements


Best Reactive Frameworks Available in Java
List of available reactive frameworks in java being used in non-trivial applications.
- Eclipse Vert.x
- Atmosphere
- Spring Webflux
- RxJava
- RatPack
- Project Reactor
- Akka
Demo 2: IntelliJ based project with basics concepts
In JDK 9
- JDK9 java.util.concurrent.Flow
- The interfaces available in JDK9’s java.util.concurrent.Flow, are 1:1 semantically equivalent to their respective Reactive Streams counterparts

Spring WebFlux
Spring 5 has embraced reactive programming paradigm by introducing a brand new reactive framework i.e spring Webflux.
It is asynchronous framework from the bottom up.
It can run on servlet containers using the servlet 3.1 non-blocking IO API.
Library used is reactor which is an implementation of reactive streams specification.
Reactor provides two main types called Flux and Mono. Both implement the Publisher interface provided by Reactive Streams.
Flux is used to represent a stream of 0..N elements and Mono is used to represent a stream of 0..1 element
Although spring uses Reactor as a core dependency for most of its internal APIs, it also supports RxJava at the application level.
Demo Spring Webflux : It uses mongodb as db, so in order to use it, please install mongodb locally.
References:
https://github.com/callicoder/spring-webflux-reactive-rest-api-demo
https://www.callicoder.com/reactive-rest-apis-spring-webflux-reactive-mongo/
https://www.reactive-streams.org/
https://github.com/rstoyanchev/s2gx2015-intro-to-reactive-programming