La programmation réactive a été populaire parmi la communauté des développeurs et les clients au cours des dernières années en raison de sa capacité à créer des applications de manière déclarative plutôt que de les forcer à former des applications plus sensibles et résilientes. Le fait que Spring 5 intègre des systèmes de réaction dans son cadre central a montré un passage de paradigme à la programmation déclarative.
La programmation réactive gère les flux de données asynchrones entre les producteurs de données et les consommateurs, qui doivent répondre aux données en douceur. Par conséquent, la programmation réactive est une application fluide qui est asynchrone et axée sur l'événement, nécessitant un petit nombre de threads à l'échelle.
La programmation réactive est difficile à créer des architectures basées sur des threads en raison de la forte complexité impliquée dans l'expansion des applications basées sur des états, des threads et des verrous partagés.
Dans le contexte de la programmation réactive, «Lorsqu'il y a des données dans un flux, tout est un flux et se comporte en douceur.»
L'abstraction de haut niveau et la programmation réactive entraînent une amélioration de la lisibilité du code, afin que les développeurs puissent se concentrer principalement sur l'interdépendance des événements qui définissent la logique métier.
Dans des environnements très concurrents, le modèle de réponse convient naturellement au traitement des messages, qui est un cas d'utilisation de l'entreprise courante.
En raison de la nature de la contre-pression de l'exécution, une approche réactive est mieux adaptée pour contrôler le trafic entre les producteurs et les consommateurs, ce qui aidera à éviter l'épuisement de la mémoire.
Pour un ou plusieurs threads, les tâches de liaison IO peuvent être exécutées de manière asynchrone et non bloquante sans bloquer le thread actuel.
Les notifications de sous-systèmes de connexion multiples peuvent être déclenchées dans des applications à haute interaction et en temps réel ou à toute opération / événements, auquel cas la programmation réactive peut être gérée plus efficacement.
Le "flux de réponse" définit une spécification API qui contient un ensemble minimal d'interfaces qui divulguent des méthodes de définition des opérations et des entités de flux de données qui ne bloquent pas la contre-pression.
Avec l'introduction de la pression arrière, le flux de réponse permet à l'utilisateur de contrôler le taux d'échange de données de l'éditeur.
L'API de streaming de réponse java.util.concurrent.flow est officiellement fait partie de Java 9.
Le flux de réponse est principalement utilisé comme couche d'interopérabilité.
Le module de réactivité Spring-Web et Spring MVC prennent en charge la même programmation @Controller, mais le printemps-Web-réactif est exécuté sur des moteurs réactifs et non bloquants.
Suivez ce document, voir:
http://docs.spring.io/spring-framework/docs/5.0.0.build-snapshot/spring-framework-reference/html/web-reactive.html
Le module de printemps-Web réactif et le printemps MVC partagent de nombreux algorithmes communs, mais le module de réactivité printanier a redéfini de nombreux contrats de printemps MVC, tels que les mains de la main et le gestionnaire, pour les rendre asynchrones et non bloquants, et pour permettre des demandes et réponses à la réaction).
En plus du repos existant, un nouveau WebClient réactif est également introduit dans le printemps 5.
Les clients HTTP qui prennent en charge la programmation réactive (tels que Reactor, Netty, Undertow) ont adopté une série d'abstractions Responsives ClientHttpRequest et ClientHttpResponse qui exposent les demandes et les organismes de réponse en tant que Flux <Databuffer> et fournissent un soutien complet à la bac à main levée du côté de la lecture et de l'écriture.
Spring 5 Framework présente le réacteur comme une implémentation de la spécification des flux réactives.
Le réacteur est la bibliothèque réactive de prochaine génération pour la construction d'applications non bloquantes sur le JVM.
Le réacteur étend le contrat de base des éditeurs de flux réactives et définit les types d'API de flux et de mono pour fournir des opérations déclaratives pour les séquences de données de 0..N et 0..1, respectivement.
Spring Web Reactive utilise le servlet 3.1 pour fournir des E / S non bloquantes et fonctionne sur les conteneurs de servlet 3.1.
Spring WebFlux propose deux modèles de programmation parmi lesquels choisir.
Le printemps 5 comprend le printemps Web réactif (sous le module Spring-Web-réactif) et Spring Web MVC (sous le module Spring-WebMVC).
Bien que les modules Spring Web Reactive et Spring Web MVC partagent de nombreux algorithmes, car Spring Web Reactive peut fonctionner sur la couche adaptateur HTTP réactive réactive réactive, ils ne partagent pas de code entre eux.
L'exécution de Spring MVC nécessite un conteneur de servlet, tandis que Spring Web Reactive peut également fonctionner sur des cours d'eau sans service, comme sur Netty et Undertow.
Si vous avez besoin d'utiliser une pile Web non bloquante avec un framework Web fonctionnel léger et fonctionnel et de l'utiliser avec Java 8 Lambda ou Kotlin, vous devriez envisager de passer des applications Spring MVC à Spring Web réactive.
Il s'agit d'une version 2.0.0 M5 de pom.xml qui s'appuie sur webfiux.
<s parent> <proupId> org.springframework.boot </prôdId> <ArtifactId> Spring-boot-starter-Parent </ ArtifactId> <DERVIÈRE> 2.0.0.m5 </ version> </parent> </peedendescy> <dependency> <proupId> org.springframework.boot </proupId> <ArtefactId> Spring-boot-starter-webflux </refactive> </dpendance> </dpendances>
Méthode traditionnelle vs méthode de réponse
Dans les méthodes traditionnelles, l'exécution sera bloquée et attendra la fin de l'exécution de votre service. Dans le code suivant, après la première instruction d'impression, l'exécution du programme sera bloquée et attendra l'exécution du service. Une fois l'exécution du service terminée, l'exécution du programme est reprise et une deuxième instruction d'impression est exécutée.
@GetMapping ("/ traditionnel") Liste publique <Dudce> getAllProducts () {System.out.println ("Ways traditionnel démarré"); List <product> products = produrservice.getProducts ("traditionnel"); System.out.println ("Way traditionnel terminé"); Retour Produits;}Dans la méthode de réponse, l'exécution du programme se poursuivra sans attendre l'achèvement de l'exécution du service. Dans le code suivant, après la première instruction d'impression, la deuxième instruction d'impression sera exécutée de manière non bloquante sans attendre que l'exécution du service se termine. Le flux de flux sera rempli avec la disponibilité des données du produit.
@GetMapping (value = "/ réactif", .text_event_stream_value) FLUX PUBLIQUE <RODUCTEMENT> GETALL () {System.out.println ("Reactif Way Using Flux démarré"); FLUX <RODUCT> FLUXPRODUCTS = prodService.getProductsStream ("Flux"); System.out.println ("Voie réactive à l'aide du flux terminé"); Retour FluxProducts;}En plus du repos existant, Spring 5 a également introduit Reactive WebClient.
Les abstractions ClientHttpRequest et ClientHttpResponse exposent les corps de demande et de réponse à l'aide de Flux <Databuffer> et fournissent une prise en charge complète de la contre-pression du côté de la lecture et de l'écriture.
Les abstractions du codeur et du décodeur du noyau de ressort sont également utilisées du côté client pour sérialiser ou transmettre un flus endian dans des objets de type.
Voici un exemple de WebClient réactif qui appelle le terminal et reçoit et traite des objets de flux de flux réactifs.
@GetMapping ("/ Accounts / {id} / alerts") FLUX PUBLIQUE <LATERD> GETACTACTALERTS (@PathVariable Long ID) {WebClient WebClient = new WebClient (nouveau ReactorClientHttpConnector ()); return this.repository.getAccount (id) .flatMap (compte -> webClient.perform (get ("/ alerts / {key}", account.getKey ())). Extract (bodystream (alert.class));}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.