MasterCloudApps-Projects / AsyncReactiveProgramming

This repository is intended to be a compilation of presentations, examples, links, and other resources on asynchronous and reactive programming in Java

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Asynchronous & reactive programming with Java


๐Ÿ™‹โ€โ™‚๏ธ 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: Mรกster Cloud Apps. Desarrollo y despliegue de aplicaciones en la nube [ ๐Ÿ‡ช๐Ÿ‡ธ ]

The project also provides, as documentation, a presentation about asynchronous and reactive programming in Java. You can check the slides here:

Name Version Download Updated at Lang

Presentaciรณn: Programaciรณn asรญncrona y reactiva con Java

1.0.0

pptx or pdf

2020-12-08

๐Ÿ‡ช๐Ÿ‡ธ

Slides: Asynchronous and reactive programming with Java

0.0.3

pptx or pdf

2020-11-18

๐Ÿ‡ฌ๐Ÿ‡ง

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ Academic resources

On the other hand, the academic resources delivered as part of the completion of the project are also included:

Name Version Download Updated at Lang

Memoria: Programaciรณn asรญncrona y reactiva con Java

1.0.0

pdf

2020-12-14

๐Ÿ‡ช๐Ÿ‡ธ

Presentaciรณn: Programaciรณn asรญncrona y reactiva con Java

1.0.0

pdf

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 Spring Boot (2.4+).

Maven (3.6+) or Gradle (6+) will be used as build/dependency management tool. In addition, some examples will use the Lombok library to generate code through annotations

  • 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

  • Example 01. Basic comparison: Basic CRUD API (GET, POST, PUT, DELETE) in two flavors, Spring MVC and Spring WebFlux

  • Example 02. Using Spring WebClient: Basic API to retrieve information from remote web services using the reactive WebClient

  • Example 03. Gateway!: Gateway service to route requests to worker services to practice with Spring Cloud Gateway project

  • Example 04. Reactive DB access with R2DBC: Simple API with an internal relational PostgreSQL repository. R2DBC provides reactive non-blocking APIs to relational databases

  • 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

  • Example 06. Project Loom: Example for a first contact with Project Loom, its implementation and how to start with Virtual Threads

๐Ÿ”— Resources

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Main Reactive Streams implementations

๐Ÿ€ Spring ecosystem

It seems obvious but the best place to find good information about the Spring ecosystem is its official documentation:

Table 1. Interesting videos and articles about Reactive Spring
Name Author Year Info

Guide to "Reactive" for Spring MVC Developers

Rossen Stoyanchev

2018

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Moving from Imperative to Reactive

Paul Harris

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Migrating from Imperative to Reactive

Nicholas Frankel

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Doโ€™s and Donโ€™ts: Avoiding First-Time Reactive Programmer Mines

Sergei Egorov

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Benefits of reactive programming with Reactor and Spring Boot 2

Violeta Georgieva

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Avoiding Reactor Meltdown

Phil Clay

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Reactive Performance

Oleh Dokuka

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Getting Started with R2DBC

Mark Heckler

2018

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

The RSocket Revolution

Josh Long

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Flight of the Flux: A look at Reactor execution model

Simon Baslรฉ

2018

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Flight of the Flux 1 - Assembly vs Subscription

Simon Baslรฉ

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Flight of the Flux 2 - Debugging Caveats

Simon Baslรฉ

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Flight of the Flux 3 - Hopping Threads and Schedulers

Simon Baslรฉ

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Project Reactor: Which operator do I need? (Appendix A)

Project Reactor Docs

-

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

๐ŸŒˆ Other framework ecosystems

Table 2. Interesting videos and articles about other frameworks and ecosystems
Name Author Year Ecosystem Info

Quarkus - Getting started with Reactive

-

-

Quarkus

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Reactive Quarkusโ€“A Java Mutiny

Clement Escoffier

2020

Quarkus

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

Reactive HTTP Request Processing

-

-

Micronaut

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Configurations for Reactive Programming

-

-

Micronaut

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Microservicios reactivos con Micronaut

Ivรกn Lรณpez

2019

Micronaut

๐Ÿ‡ช๐Ÿ‡ธ ๐Ÿ“น

Micronaut Tutorial: Reactive

Piotr Minkowski

2019

Micronaut

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

โ˜• Project Loom

First and foremost: What is Project Loom?

According to OpenJDK Wiki:

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 addition of the following constructs:

  • Virtual threads

  • Delimited continuations

  • Tail-call elimination

Table 3. Interesting articles and resources about Project Loom
Name Author Year Info

Loom - OpenJDK Wiki

-

-

๐Ÿ‡ฌ๐Ÿ‡ง

Project Loom: Modern Scalable Concurrency for the Java Platform

Ron Pressler

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“น

On the performance of user-mode threads and coroutines

Ron Pressler

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

On Project Loom

Nicholas Frankel

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Loom - Part 0 - Rationale

Arnaud Bos

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Loom - Part 1 - Itโ€™s all about Scheduling

Arnaud Bos

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Loom - Part 2 - Blocking code

Arnaud Bos

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Loom - Part 3 - Asynchronous code

Arnaud Bos

2019

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Loom - Part 4 - Non-thread-blocking async I/O

Arnaud Bos

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Experimenting with Project Loom EAP and Spring WebMVC

Mark Paluch

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

Project Loom and structured concurrency

Cay Horstmann

2020

๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ“‹

โš’๏ธ Libraries and tools

Table 4. Recommended libraries and tools
Name Description

VisualVM

VisualVM is a visual tool integrating commandline JDK tools and lightweight profiling capabilities. Designed for both development and production time use

Java Mission Control

Mission Control is an open source production time profiling and diagnostics tool for Java

Awaitility

Awaitility is a DSL that allows you to express expectations of an asynchronous system in a concise and easy to read manner

BlockHound

Java agent to detect blocking calls from non-blocking threads

Reactor Tools

A set of tools to improve Project Reactorโ€™s debugging and development experience. Starting from Reactor 3.3.0.M2, reactor-tools is now moved to reactor-core

Reactor Addons

Reactor-adapter and reactor-extras utils

Rx Marbles

A webapp for experimenting with diagrams of Rx Observables, for learning purposes

๐Ÿ“• Books

Table 5. Recommended books
Name Author Year Lang

Reactive Design Patterns

Roland Kuhn, Jamie Allen

2014

๐Ÿ‡ฌ๐Ÿ‡ง

Reactive Application Development

Sean Walsh, Duncan K. DeVore, Brian Hanafee

2018

๐Ÿ‡ฌ๐Ÿ‡ง

Reactive Programming with RxJava: Creating Asynchronous

Tomasz Nurkiewicz, Ben Christensen

2016

๐Ÿ‡ฌ๐Ÿ‡ง

Hacking with Spring Boot 2.3: Reactive Edition

Greg L. Turnquist

2020

๐Ÿ‡ฌ๐Ÿ‡ง

Reactive Spring

Josh Long

2020

๐Ÿ‡ฌ๐Ÿ‡ง

Spring Boot: Up and Running: Building Cloud Native Java and Kotlin Applications

Mark Heckler

2021

๐Ÿ‡ฌ๐Ÿ‡ง

๐Ÿ‘ฃ Courses

Table 6. Recommended courses
Name Author Platform Lang

Java concurrency and multithreading (playlist)

Jakob Jenkov

Youtube

๐Ÿ‡ฌ๐Ÿ‡ง

Efficient Java Multithreading and Concurrency with Executors

Arun Kumar

Udemy

๐Ÿ‡ฌ๐Ÿ‡ง

Reactive Spring

Josh Long

Oreilly

๐Ÿ‡ฌ๐Ÿ‡ง

๐Ÿšถโ€โ™€๏ธ Who to follow?

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป People

๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Official accounts

๐Ÿค Credits

About

This repository is intended to be a compilation of presentations, examples, links, and other resources on asynchronous and reactive programming in Java

License:Apache License 2.0