Reactive Programming
Reactive programming focuses on non-blocking, asynchronous execution
The Reactive Manifesto
Responsive
- The System responds in a timely manner
- Responsiveness is the cornerstone of usability and utility
- Reponsiveness also means problems may be detected quickly
- Responsive systems provide rapid and consistent response times
- Consistent behavior simplifies error handling, builds end user confidence, and encourages further interaction
Resilient
- System stays responsive in the face of failure
- Resilience is achieved by replication, containment, isolation, and delegation
- Failures are contianed within each component
- Parts of the system can fail, without compromising the system as a whole
- Recovery of each component is delegated to another
- High-availability is ensured by replication where necessary
Elastic
- The System stays responsive under varying workload
- Reactive Systems can react to changes in the input rate by changing the amount of resources allocated to service inputs
- Reactive Systems achieve elaticity in a cost effective way on commodity hardware and software platforms
Message Driven
- Reactive Systems rely on asynchronous message passing to establish a boundary between components
- This ensures loose coupling, isolation, and location transparency
- Message passing enables load management, elasticity and flow control
- Location transparent messaging makes management of failures possible
- Non-blocking communication allows recipients to only consume resources while active leading to less system overhead
Features of Reactive Programming
- Data Streams
- Asyncronous
- Non-blocking - Process what is availble and ask for a notificaiton when more is available
- Backpressure - The ability of the client to throttle data
- Failures as Messages - Exceptions are processed by a handler function
Reactive Streams
- Reactive Streams API was started in 2013 by engineers from Netflix and other companies. It was officially released 2015 and is now part of Java 9 JDK
- spring-webflux is a whole new non-blocking API for Spring
Spring Reactive Types
- Mono - A publisher with 0 or 1 elements in datastream
- Flux - A publisher with 0+ elements in datastream
No Comments