Ce tutoriel montre comment construire une application web réactive et non-bloquante avec Spring WebFlux.
L'application utilise WebClient pour interroger de manière non-bloquante une API externe (JSONPlaceholder) et retourner les résultats. Elle démontre les concepts fondamentaux de la programmation réactive avec Spring.
-
Spring WebFlux: Le module de Spring pour les applications web réactives. Il fournit un modèle de programmation non-bloquant qui peut gérer un grand nombre de connexions concurrentes avec un nombre limité de threads.
-
Project Reactor: La bibliothèque de programmation réactive utilisée par WebFlux. Elle introduit les types
Mono(pour 0 ou 1 élément) etFlux(pour 0 à N éléments). -
WebClient: Le client HTTP réactif de Spring, utilisé pour effectuer des requêtes réseau de manière non-bloquante. -
Schedulers: Dans la programmation réactive, il est crucial de ne pas bloquer l'event loop. Pour les opérations qui sont intrinsèquement bloquantes (comme des appels à des librairies non-réactives ou des opérations I/O bloquantes), on peut utiliser unScheduler(commeSchedulers.boundedElastic()) pour déléguer ce travail à un thread séparé, préservant ainsi la nature non-bloquante de l'application.
GET /api/posts: Récupère une liste de posts de manière réactive et la retourne comme unFlux<Post>.GET /api/posts/{id}: Récupère un seul post par son ID et le retourne comme unMono<Post>.GET /api/posts/{id}/enriched: Récupère un post, puis applique une opération de transformation (simulée comme étant bloquante) sur un thread séparé pour ne pas bloquer l'event loop principal.
- Lancez l'application Spring Boot.
- Utilisez un client HTTP pour interroger les endpoints.
# Récupérer tous les posts
curl http://localhost:8080/api/posts
# Récupérer un post spécifique
curl http://localhost:8080/api/posts/1
# Récupérer un post enrichi (avec une latence simulée)
curl http://localhost:8080/api/posts/1/enriched