Para construir servicios reactivos, disponemos de varias librerias potentes:
La implementacion Java de ReactiveX, ofrece tipos para diferentes escenarios:
Emite un solo valor, o ninguno, o un error.
Maybe.just("dato").subscribe(System.out::println);
Emite exactamente un valor o un error.
Single.just("dato").subscribe(System.out::println);
Secuencia de elementos con backpressure.
Flowable.range(1, 5).subscribe(System.out::println);
Completado o error, sin valor devuelto.
Completable.complete().subscribe(() -> System.out.println("Completado"));
Libreria reactiva base de Spring WebFlux, con dos tipos principales:
Emite 0 o 1 elemento, similar a Maybe/Single.
Mono.just("dato").subscribe(System.out::println);
Secuencia de 0 a N elementos, similar a Flowable.
Flux.range(1, 5).subscribe(System.out::println);
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);
}
}
Selecciona la herramienta adecuada para tu contexto. RxJava tiene mas tipos especializados, Reactor es mas simple y se integra perfectamente con Spring.