AsyncReactiveProgramming
This repository is intended to be a compilation of presentations, examples, links, and other resources on asynchronous and reactive programming in Java
Install / Use
/learn @MasterCloudApps-Projects/AsyncReactiveProgrammingREADME
= Asynchronous & reactive programming with Java Marcos de la Calle Samaniego, @marcosDLCS marcos.dlcs@gmail.com v1.0.4, 2020-12-20 :toc:
++++
<p align="center"> <img src="resources/img/a_r_p_j_logo.png" height="160"/> </p> ++++== 🙋♂️ Presentation
This repository is intended to be a compilation of presentations, examples, links, and other resources on asynchronous and reactive programming in Java.
This initiative is part of the final project of: https://www.codeurjc.es/mastercloudapps/[Máster Cloud Apps. Desarrollo y despliegue de aplicaciones en la nube, window=_blank] [ 🇪🇸 ]
++++
<p align="center"> <img src="resources/img/c_a_m_logo.png" height="140"/> <img src="resources/img/c_u_logo.png" height="140"/> <img src="resources/img/u_logo.png" height="140"/> </p> ++++The project also provides, as documentation, a presentation about asynchronous and reactive programming in Java. You can check the slides here:
[cols="9,4,3,3,1"] |=== |Name |Version |Download |Updated at | Lang
| Presentación: Programación asíncrona y reactiva con Java | 1.0.0 | https://drive.google.com/file/d/1Whum-P6f5nqzq3Qj55C-p2DNLFvEKDBC/view?usp=sharing[pptx, window=blank] or https://drive.google.com/file/d/1bnDI5x$$$$jeQ1uV9MXXmi8-jbUGZ0Rfm9Z/view?usp=sharing[pdf, window=_blank] | 2020-12-08 | 🇪🇸
| Slides: Asynchronous and reactive programming with Java | 0.0.3 | https://drive.google.com/file/d/1vfMmL__LiVgOm2fLsEiZVVHBcqgiD4Ez/view?usp=sharing[pptx, window=_blank] or https://drive.google.com/file/d/11zZQBMAHh0cgV2gVhK-6L5KEZ4i9-hSv/view?usp=sharing[pdf, window=_blank] | 2020-11-18 | 🇬🇧 |===
=== 👩🏻🏫 Academic resources
On the other hand, the academic resources delivered as part of the completion of the project are also included:
[cols="9,4,3,3,1"] |=== |Name |Version |Download |Updated at | Lang
| Memoria: Programación asíncrona y reactiva con Java | 1.0.0 | https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/resources/academic/memoria.pdf[pdf, window=_blank] | 2020-12-14 | 🇪🇸
| Presentación: Programación asíncrona y reactiva con Java | 1.0.0 | https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/resources/academic/presentacion_tfm.pdf[pdf, window=_blank] | 2020-12-14 | 🇪🇸 |===
== 📐 Examples
This section lists a series of examples that are intended to guide the content of the presentation.
Each of the mentioned examples are based on the latest version of Java (15+) and https://spring.io/projects/spring-boot[Spring Boot (2.4+), window=_blank].
https://maven.apache.org/[Maven (3.6+), window=_blank] or https://gradle.org/[Gradle (6+), window=_blank] will be used as build/dependency management tool. In addition, some examples will use the https://projectlombok.org/[Lombok, window=_blank] library to generate code through annotations
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/00-reactor-operators[Example 00. Reactor operators]: Simple project to practice with Project Reactor main operators. The purpose of the example is to show the behavior of Mono, Flux and their possibilities
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/01-basic-comparison[Example 01. Basic comparison]: Basic CRUD API (GET, POST, PUT, DELETE) in two flavors, Spring MVC and Spring WebFlux
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/02-using-spring-webclient[Example 02. Using Spring WebClient]: Basic API to retrieve information from remote web services using the reactive WebClient
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/03-gateway[Example 03. Gateway!]: Gateway service to route requests to worker services to practice with Spring Cloud Gateway project
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/04-reactive-db-access-with-r2dbc[Example 04. Reactive DB access with R2DBC]: Simple API with an internal relational PostgreSQL repository. R2DBC provides reactive non-blocking APIs to relational databases
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/05-rsocket[Example 05. Protocols. RSocket]: A simple project to know thow the reactive binary protocol RSocket works. The example includes two small modules that communicate with each other, exploring the different possibilities that RSocket offers to us
-
https://github.com/MasterCloudApps-Projects/AsyncReactiveProgramming/tree/master/examples/06-project-loom[Example 06. Project Loom]: Example for a first contact with Project Loom, its implementation and how to start with Virtual Threads
== 🔗 Resources
=== 👼🏻 Fundamentals
- https://www.reactive.foundation/[Reactive foundation, window=_blank]
- https://www.reactivemanifesto.org/[The reactive manifesto, window=_blank]
- https://principles.reactive.foundation/[The reactive principles, window=_blank]
- https://12factor.net/[12 Factor App, window=_blank]
- https://www.reactive-streams.org/[Reactive Streams Specification, window=_blank]
- https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/Flow.html[Java 11 Flow, window=_blank]
- https://projectreactor.io/[Project Reactor, window=_blank]
=== 👨👩👧👦 Main Reactive Streams implementations
- https://projectreactor.io/[Project Reactor, window=_blank]
- https://github.com/ReactiveX/RxJava[RxJava, window=_blank]
- https://vertx.io/[VertX, window=_blank]
- https://doc.akka.io/docs/akka/current/stream/index.html[Akka Streams, window=_blank]
=== 🍀 Spring ecosystem
It seems obvious but the best place to find good information about the Spring ecosystem is its official documentation:
- https://docs.spring.io/spring-framework/docs/current/reference/html[Spring Framework Docs, window=_blank]
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle[Spring Boot Docs, window=_blank]
- https://projectreactor.io/docs/core/release/reference[Project Reactor Docs, window=_blank]
[cols="6,3,2,1"] .Interesting videos and articles about Reactive Spring |=== |Name |Author |Year |Info
| https://www.infoq.com/presentations/spring-reactive-webflux[Guide to "Reactive" for Spring MVC Developers, window=_blank] | Rossen Stoyanchev | 2018 | 🇬🇧 📹
| https://www.youtube.com/watch?v=vSHNBgY7MGA&ab_channel=SpringI%2FO[Moving from Imperative to Reactive, window=_blank] | Paul Harris | 2019 | 🇬🇧 📹
| https://hazelcast.com/blog/migrating-from-imperative-to-reactive[Migrating from Imperative to Reactive, window=_blank] | Nicholas Frankel | 2020 | 🇬🇧 📋
| https://www.youtube.com/watch?v=0rnMIueRKNU&ab_channel=SpringDeveloper[Do’s and Don’ts: Avoiding First-Time Reactive Programmer Mines, window=_blank] |Sergei Egorov |2019 |🇬🇧 📹
| https://www.youtube.com/watch?v=ODzY5uJfzDI&ab_channel=SpringI%2FO[Benefits of reactive programming with Reactor and Spring Boot 2, window=_blank] | Violeta Georgieva | 2019 | 🇬🇧 📹
| https://www.youtube.com/watch?v=xCu73WVg8Ps&ab_channel=SpringDeveloper[Avoiding Reactor Meltdown, window=_blank] | Phil Clay | 2019 | 🇬🇧 📹
| https://www.youtube.com/watch?v=pyqIpqCt8PU&ab_channel=vJUG[Reactive Performance, window=_blank] | Oleh Dokuka | 2019 | 🇬🇧 📹
| https://www.youtube.com/watch?v=qwF6v6FN_Uc&ab_channel=SpringDeveloper[Getting Started with R2DBC, window=_blank] | Mark Heckler | 2018 | 🇬🇧 📹
| https://www.youtube.com/watch?v=ipVfRdl5SP0&ab_channel=SpringDeveloper[The RSocket Revolution, window=_blank] | Josh Long | 2020 | 🇬🇧 📹
| https://www.youtube.com/watch?v=hfupNIxzNP4&ab_channel=SpringI%2FO[Flight of the Flux: A look at Reactor execution model, window=_blank] | Simon Baslé | 2018 | 🇬🇧 📹
| https://spring.io/blog/2019/03/06/flight-of-the-flux-1-assembly-vs-subscription[Flight of the Flux 1 - Assembly vs Subscription, window=_blank] | Simon Baslé | 2019 | 🇬🇧 📋
| https://spring.io/blog/2019/04/16/flight-of-the-flux-2-debugging-caveats[Flight of the Flux 2 - Debugging Caveats, window=_blank] | Simon Baslé | 2019 | 🇬🇧 📋
| https://spring.io/blog/2019/12/13/flight-of-the-flux-3-hopping-threads-and-schedulers[Flight of the Flux 3 - Hopping Threads and Schedulers, window=_blank] | Simon Baslé | 2019 | 🇬🇧 📋
| https://projectreactor.io/docs/core/release/reference/#which-operator[Project Reactor: Which operator do I need? (Appendix A), window=_blank] | Project Reactor Docs | - | 🇬🇧 📋 |===
=== 🌈 Other framework ecosystems
[cols="6,3,1,2,1"] .Interesting videos and articles about other frameworks and ecosystems |=== |Name |Author |Year | Ecosystem| Info
| https://quarkus.io/guides/getting-started-reactive[Quarkus - Getting started with Reactive, window=_blank] | - | - | Quarkus |🇬🇧 📋
| https://www.youtube.com/watch?v=kWlrGtwvOxg&ab_channel=RedHatDeveloper/[Reactive Quarkus–A Java Mutiny, window=_blank] | Clement Escoffier | 2020 | Quarkus | 🇬🇧 📹
| https://docs.micronaut.io/latest/guide/index.html#reactiveServer[Reactive HTTP Request Processing] | - | - | Micronaut |🇬🇧 📋
| https://docs.micronaut.io/latest/guide/index.html#reactiveServer[Configurations for Reactive Programming] | - | - | Micronaut |🇬🇧 📋
| https://www.youtube.com/watch?v=EvkSWuo7Mig&ab_channel=Autentia[Microservicios reactivos con Micronaut] | Iván López | 2019 | Micronaut |🇪🇸 📹
| https://piotrminkowski.com/2019/11/12/micronaut-tutorial-reactive/[Micronaut Tutorial: Reactive] | Piotr Minkowski | 2019 | Micronaut |🇬🇧 📋 |===
=== ☕ Project Loom
First and foremost: What is Project Loom?
According to https://wiki.openjdk.java.net/display/loom/Main[OpenJDK Wiki, window=_blank]:
==== Project Loom is to intended to explore, incubate and deliver Java VM features and APIs built on top of them for the purpose of supporting easy-to-use, high-throughput lightweight concurrency and new programming models on the Java platform. This is accomplished by the additi
Security Score
Audited on Apr 24, 2025
