Skip to content

devdevbadillo/java_reactive_programming_theory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

Java Reactive Programming

Tabla de contenido

Introduction

Antecedentes

Problemas de la programación imperativa/síncrona

Problemas de la programación asíncrona tradicional

¿Qué es la Programación Reactiva?

Beneficios clave

Process / Thread / CPU / RAM / Scheduler

Repaso de Hilos y Procesos

CPU y RAM

Scheduler del Sistema Operativo

Concurrencia vs. Paralelismo

Efectos secundarios de la concurrencia

IO Models

I/O Bloqueante (Blocking I/O)

I/O No Bloqueante (Non-Blocking I/O)

I/O Asíncrono (Asynchronous I/O)

Java NIO y NIO.2 (AIO)

Communication Patterns

Síncrono Request/Response

Asíncrono Request/Response

Streaming

Event-Driven Architectures

What is Reactive Programming?

Definición formal

Programación Orientada a Eventos vs. Reactiva

Ventajas del enfoque reactivo

Reactive Streams Specification

Orígenes y propósito

Interfaces Clave

Reglas y Garantías de la Especificación

Publisher/Subscriber Communication - Step By Step

Demostración del flujo

El rol de request() (Backpressure)

Diagramas Marble (Marble Diagrams)

Mono

Concepto de Mono

Emisión de 0 o 1 elemento

Lazy vs. Eager

Creación de Monos

Mono.just() y Mono.empty()

Mono.error()

Mono.fromCallable(), Mono.fromRunnable(), Mono.fromSupplier()

Mono.defer()

Mono.fromFuture(), Mono.fromCompletionStage()

Transformación de Monos

map()

flatMap()

flatMapMany()

Manejo de Errores en Mono

onErrorReturn()

onErrorResume()

doOnError()

retry()

doFinally(), doOnTerminate()

Manejo de Eventos del Ciclo de Vida

Operadores de Condición y Filtrado

Combinación de Monos

zipWith()

and()

then()

Suscripción a un Mono

subscribe()

block()

toFuture(), toCompletionStage()

Flux

Concepto de Flux

Emisión de 0 a N elementos

Lazy Execution

Creación de Fluxs

Flux.just()

Flux.fromIterable(), Flux.fromArray(), Flux.fromStream()

Flux.range()

Flux.interval()

Flux.generate()

Flux.create()

Flux.error(), Flux.empty()

Transformación de Fluxs

map()

flatMap()

concatMap()

groupBy()

Filtrado y Condición

Combinación de Fluxs

merge()

concat()

zip()

combineLatest()

withLatestFrom()

Agregación y Reducción

reduce()

collectList(), collectMap(), collectMultimap()

count(), hasElements()

Manejo de Errores en Flux

Suscripción a un Flux

subscribe()

blockFirst(), blockLast()

Operators

Categorías de Operadores

Profundización en Operadores Comunes

Operadores de Error Handling

retryWhen()

using()

Backpressure y Operadores

Composición de Operadores

Hot & Cold Publishers

Publishers Fríos (Cold Publishers)

Definición

Analogía

Ejemplos

Características

Publishers Calientes (Hot Publishers)

Definición

Analogía

Ejemplos

Características

Transformar Cold a Hot

publish() / autoConnect()

share()

cache()

Uso de Sinks

Sinks.One, Sinks.Many, Sinks.Empty

Cómo usar Sinks

Threading & Schedulers (Optional)

El modelo de hilo de Project Reactor

subscribeOn()

publishon()

Schedulers de Project Reactor

Concepto

Tipos de Schedulers

Mejores Prácticas de Schedulers

Back Pressure / Overflow Strategy (Optional)

Estrategias

onBackpressureBuffer(), onBackpressureDrop(), etc.

Concepto de Request Management

Batching / Windowing / Grouping (Optional)

buffer(), window(), groupBy()

Repeat & Retry (Optional)

repeat()

retry()

retryWhen()

Sinks (Optional)

Sinks.One, Sinks.Many, Sinks.Empty

Concepto de emit() y su seguridad

Uso para integrar APIs que no son reactivas

Context (Optional)

ContextView y Context

contextWrite()

deferContextual()

Casos de uso

## Unit Testing With Step Verifier (Optional)

### La importancia de las pruebas reactivas

StepVerifier

create()

expectNext(), expectNextCount(), expectNextSequence()

expectError(), expectComplete()

expectSubscription()

thenRequest()

verifyComplete(), verifyError()

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published