web-dev-qa-db-fra.com

Avantages d'avoir des points de terminaison HTTP renvoyer des instances Flux / Mono au lieu de DTO

J'ai regardé Spring Tips: Functional Reactive Endpoints avec Spring Framework 5. et lu un peu sur le réacteur à ressort, mais je ne le comprends pas très bien.

Quels sont les avantages d'avoir des points de terminaison renvoyant des instances de Flux/Mono (jacksonifiées) au lieu d'objets directement vers dto (jacksonifiés), étant donné que j'ai netty et spring reactor actif? J'ai d'abord supposé que les flux réactifs fonctionneraient, dans le contexte de requête/réponse http, plus comme des websockets où le serveur pousse les données vers le récepteur avec un canal ouvert, mais cela ne semble pas être le cas.

De plus, qu'est-ce que netty fait mieux en programmation réactive que tomcat?

Je suis désolé si ces questions semblent stupides, mais je ne comprends pas très bien le but de cette nouvelle orientation du cadre. Pourquoi est-elle apparue, comment fonctionne-t-elle et quels problèmes résout-elle?

15

Je vous suggère fortement de regarder le récent présenté dans Devoxx Belgium "Application Web Réactive avec Spring 5" par Rossen Stoyanchev .

Il y explique à quoi ressemble le contrôleur Web réactif (présenté ci-dessous) à la surface Servlet HTTP Spring MVC Contrôleur de demande/réponse mais ce n'est pas le cas

@GetMapping("/users/{id}")
public Mono<User> getUser(@PathValiable Long id) {
   return this.userRepository.findById(id);
}

@GetMapping("/users")
public Flux<User> getUsers() {
   return this.userRepository.findAll();
}

il raconte comment Servlet 3.1 bien que le non-blocage ne fonctionne pas vraiment pour une réactivité totale et la façon dont le code collant connectant le Servlet 3.1 et les flux réactifs est implémenté dans le cadre des modifications de Spring 5 pour les conteneurs Web compatibles Servlet 3.1 (Jetty et Tomcat).

Et bien sûr, il aborde les serveurs entièrement réactifs et non bloquants (Netty, Undertow) sont pris en charge pour exécuter Reactive Streams.

12
dimitrisli

Ce n'est pas juste de dire que Netty est meilleure que Tomcat. L'implémentation est différente. Tomcat utilise Java NIO pour implémenter la spécification de servlet 3.1. En attendant, netty utilise également NIO mais présente une API personnalisée. Si vous voulez avoir un aperçu de la façon dont la servlet 3.1 est implémentée dans Netty, regardez cette vidéo - https://youtu.be/uGXsnB2S_vc

2
Yevhenii Melnyk