Tipos de Reactividad

Construyendo servicios reactivos

Para construir servicios reactivos, disponemos de varias librerias potentes:

RxJava

La implementacion Java de ReactiveX, ofrece tipos para diferentes escenarios:

Maybe

Emite un solo valor, o ninguno, o un error.

Maybe.just("dato").subscribe(System.out::println);

Single

Emite exactamente un valor o un error.

Single.just("dato").subscribe(System.out::println);

Flowable

Secuencia de elementos con backpressure.

Flowable.range(1, 5).subscribe(System.out::println);

Completable

Completado o error, sin valor devuelto.

Completable.complete().subscribe(() -> System.out.println("Completado"));

Project Reactor

Libreria reactiva base de Spring WebFlux, con dos tipos principales:

Mono

Emite 0 o 1 elemento, similar a Maybe/Single.

Mono.just("dato").subscribe(System.out::println);

Flux

Secuencia de 0 a N elementos, similar a Flowable.

Flux.range(1, 5).subscribe(System.out::println);

Spring WebFlux

Framework web reactivo de Spring, construido sobre Project Reactor:

@RestController
public class UsuarioController {
    @GetMapping("/usuarios")
    public Flux<Usuario> todos() {
        return usuarioService.buscarTodos();
    }
    
    @GetMapping("/usuarios/{id}")
    public Mono<Usuario> buscarPorId(@PathVariable Long id) {
        return usuarioService.buscarPorId(id);
    }
}
                

Esencia

Selecciona la herramienta adecuada para tu contexto. RxJava tiene mas tipos especializados, Reactor es mas simple y se integra perfectamente con Spring.