Programação Reativa

TL;DR

O Galho 11 cobre o modelo reativo na JVM: o que é programação reativa e o Reactive Streams, Mono/Flux e os operadores do Project Reactor, schedulers e backpressure, Spring WebFlux e WebClient, R2DBC, e o confronto honesto reativo vs Virtual Threads — quando usar e, principalmente, quando não usar. São 16 notas em 3 fases (Iniciado, Adepto, Magus).

Sobre este galho

Programação reativa é o modelo push, assíncrono e não-bloqueante da JVM: dados como um stream que empurra eventos a quem reage, sob controle de demanda (backpressure), compostos declarativamente por operadores. Este galho parte do conceito e do Reactive Streams, percorre o Project Reactor (Mono/Flux, operadores, schedulers, backpressure), sobe pra camada web (Spring WebFlux, WebClient, functional endpoints), desce pro banco (R2DBC) e fecha com a decisão de engenharia: quando reativo paga o próprio custo.

Audiência primária: dev pleno/sênior que vai encarar entrevista internacional e precisa explicar o modelo reativo com critério. Secundária: quem mantém ou avalia um stack WebFlux/R2DBC e precisa decidir entre reativo e o imperativo.

É um galho novo (majoritariamente pesquisa em doc oficial — Project Reactor, Spring WebFlux, R2DBC, Reactive Streams), com uma única poda cirúrgica: a seção ## Spring WebFlux do tronco Backend/Spring Boot.md, que apenas apontava “merece sua própria nota”. E tem quádrupla fronteira: este galho confronta o modelo de threads do Galho 4 (Concorrência e paralelismo — o confronto reativo vs Virtual Threads), substitui o stack web do Galho 9 (Web e APIs REST — Spring MVC imperativo vs WebFlux reativo), contrasta a persistência do Galho 10 (Persistência de dados — JPA/JDBC bloqueante vs R2DBC reativo) e roda sobre o container do Galho 8 (Spring Core e Boot). As notas linkam de volta a essas fronteiras sem re-explicá-las.

A tese central, sem hype: os Virtual Threads (Java 21 GA) tornaram o modelo imperativo viável pra alta concorrência I/O-bound sem a complexidade do Reactor — então reativo virou nicho: ainda vence em streaming real e backpressure de verdade, mas perdeu a maioria dos CRUDs. Por isso “quando não usar reativo” é metade do galho.

Mensageria reativa/Reactor Kafka é o galho Mensageria; resiliência/backpressure distribuído é o galho Microservices e sistemas distribuídos e segurança reativa/WebFlux Security é fronteira do galho Segurança; testes reativos com StepVerifier são o galho Testes.

Iniciado

O modelo mental — antes de qualquer operador.

Adepto

Operadores, fluxo e a camada web.

Magus

Persistência reativa, o confronto e a decisão.

  • 13 — R2DBC — acesso reativo ao banco sem EntityManager, persistence context nem lazy loading (vs a JPA do Galho 10).
  • 14 — Reativo vs Virtual Threads — o confronto que o Galho 4 adiou: onde reativo ainda vence e onde os Virtual Threads venceram.
  • 15 — Quando (não) usar reativo — o custo cognitivo, os stack traces fragmentados e o checklist de decisão honesto.
  • 16 — Capstone — uma request reativa do DispatcherHandler ao Flux, sem bloquear o event loop.

Rotas alternativas

  • Completa — 01 → 16 em ordem (o caminho do modelo ao capstone).
  • Entrevista internacional — 01 → 03 → 05 → 09 → 10 → 14 → 16 (modelo, Mono/Flux, map/flatMap, backpressure, WebFlux, reativo-vs-VT, capstone — o que mais cai).
  • Os operadores do Reactor — 03 → 04 → 05 → 06 → 07 → 08 (Mono/Flux, lazy, map/flatMap, combinação, erro, schedulers).
  • O stack web reativo — 01 → 10 → 11 → 12 → 13 → 16 (modelo, WebFlux, WebClient, functional, R2DBC, capstone).
  • Reativo vs Virtual Threads (a ponte com o Galho 4) — 01 → 09 → 14 → 15 + Virtual Threads e Project Loom (a decisão honesta).

Todas as notas

TABLE fase AS "Fase", status AS "Status"
FROM "03-Dominios/Java/Programação Reativa"
WHERE type = "concept"
SORT file.name ASC

Veja também

Galhos 12 (Segurança), 13 (Testes), 14 (Mensageria), 16 (Microservices) e 17 (Cloud-native) — planejados.

16 items neste arquivo.