In this chapter, we covered many topics. We briefly outlined the history of Reactor to ascertain the motivation behind yet another reactive library, Project Reactor. We also looked at the most important milestones of this library—milestones that were needed to build such a versatile and powerful tool. Furthermore, we looked at an overview of the main problems with the RxJava 1.x implementation, as well as problems with early Reactor versions. By looking at what has been changed in Project Reactor after the Reactive Streams specification, we highlighted why reactive programming—so efficient and straightforward—requires such a challenging implementation.
We also described the Mono and Flux reactive types, as well as the different ways to create, transform, and consume Reactive Streams. We looked inside a running stream...