Je souhaite utiliser 2 approches (réactive et standard) dans un projet.
J'ai essayé de migrer un REST point de terminaison API vers webflux réactif et tester les performances avant de migrer le reste d'entre eux. Mais cela n'a pas fonctionné. J'ai ajouté un routeur et un gestionnaire pour lui, mais jusqu'à ce que je ne le fasse pas retirer spring-boot-starter-web
des dépendances et désactivez @RestController
J'ai eu http 404
code tout le temps. Est-ce possible ou non? Ou dois-je migrer tous les projets vers une approche réactive?
Comme expliqué dans la documentation de référence de Spring Boot, Spring Boot configurera automatiquement une application Spring MVC si MVC et WebFlux sont disponibles . Il y a plusieurs raisons à cela:
Selon l'objectif que vous essayez d'atteindre, il peut y avoir plusieurs façons de travailler sur ce point.
Si vous souhaitez utiliser WebClient
pour optimiser plusieurs appels HTTP distants simultanés et utiliser des opérateurs Reactor, vous pouvez continuer à utiliser des contrôleurs annotés Spring MVC et renvoyer des types réactifs comme valeurs de retour ( plus sur ce dans cette conférence Spring Boot ).
Si vous souhaitez travailler sur une évolutivité et une latence pures (donc pas nécessairement un débit brut), vous pouvez commencer à utiliser spring-boot-starter-webflux
et travailler à partir de là. Notez que l'utilisation des API de blocage (comme le blocage des appels de base de données) est interdite, et le fait d'encapsuler ceux avec Flux
ou Mono
et la planification qui fonctionnent sur des pools de threads distincts fonctionneront contre vous du côté des performances.
Enfin, si vous souhaitez utiliser l'approche fonctionnelle fournie par Spring WebFlux, il ne fonctionnera pas nécessairement mieux. Cela dépend vraiment de votre cas d'utilisation et de la façon dont vous l'implémentez.