Responsive Programming war in den letzten Jahren bei der Entwicklergemeinschaft und den Kunden beliebt, da sie Anwendungen auf deklarative Weise aufbauen können, anstatt sie dazu zu zwingen, sensiblere und belastbarere Anwendungen zu bilden. Die Tatsache, dass Frühjahr 5 Reaktionssysteme in sein Kerngerüst einbezieht, hat eine Paradigmenverschiebung zur deklarativen Programmierung gezeigt.
Responsive Programming verwaltet asynchrone Datenflüsse zwischen Datenproduzenten und Verbrauchern, die auf Daten reibungslos reagieren müssen. Daher ist die reaktionsschnelle Programmierung eine asynchrone und ereignisorientierte Anwendung, die eine geringe Anzahl von Threads maßstabsgetreu erfordert.
Responsive Programmierung ist aufgrund der hohen Komplexität, die bei der Ausweitung von Anwendungen auf der Grundlage gemeinsamer Veränderungszustände, Threads und Schlösser basiert.
Im Kontext der reaktionsschnellen Programmierung „Wenn Daten in einem Stream vorhanden sind, ist alles ein Stream und verhält sich reibungslos.“
Eine hochrangige Abstraktion und reaktionsschnelle Programmierung führen zu einer verbesserten Code-Lesbarkeit, sodass sich Entwickler hauptsächlich auf die gegenseitige Abhängigkeit von Ereignissen konzentrieren können, die die Geschäftslogik definieren.
In stark gleichzeitigen Umgebungen ist das Antwortmuster natürlich für die Nachrichtenverarbeitung geeignet, was ein gemeinsamer Anwendungsfall für Unternehmen darstellt.
Aufgrund der Art der Ausführung ist ein reaktionsschneller Ansatz am besten geeignet, um den Verkehr zwischen Produzenten und Verbrauchern zu kontrollieren, was dazu beiträgt, die Erschöpfung des Gedächtnisses zu vermeiden.
Für einen oder mehrere Threads können IO-Bindungsaufgaben asynchron und nicht blockiert werden, ohne den aktuellen Thread zu blockieren.
Benachrichtigungen über mehrere Verbindungssubsysteme können in hohen Interaktions- und Echtzeitanwendungen oder Operationen/Ereignissen ausgelöst werden. In diesem Fall können reaktionsschnelle Programme effizienter verwaltet werden.
"Response Flow" definiert eine API-Spezifikation, die einen minimalen Satz von Schnittstellen enthält, die Methoden zum Definieren von Operationen und Entitäten von Datenströmen offenlegen, die nicht blockiert werden.
Mit der Einführung des Rückdrucks ermöglicht der Antwortfluss dem Benutzer den Datenwechselkurs des Verlags.
Die Reaktionsstroming -API java.util.concurrent.flow ist offiziell Teil von Java 9 geworden.
Der Antwortstrom wird hauptsächlich als Interoperabilitätsschicht verwendet.
Sowohl das Spring-Web-Reaktivmodul als auch das Spring MVC unterstützen dieselbe @Controller-Programmierung, aber Spring-Web-Reaktiven werden sowohl auf reaktiven als auch nicht blockierenden Motoren ausgeführt.
Folgen Sie diesem Dokument, siehe:
http://docs.spring.io/spring-framework/docs/5.0.0.build-snapshot/spring-framework-reference/html/web-reactive.html
Das Feder-Web-Reaktivmodul und das Feder-MVC haben viele häufige Algorithmen, aber das Feder-Web-reaktive Modul hat viele Feder-MVC-Verträge wie Handlermapping und Handleradapter neu definiert, um sie asynchron und nicht blockiert zu machen, und um reaktionsschnelle HTTP-Anfragen zu aktivieren und zu reagieren).
Zusätzlich zum vorhandenen RestTemplate wird im Frühjahr 5 ein neuer reaktionsschnelles Webclient eingeführt.
HTTP -Clients, die reaktionsschnelle Programme unterstützen (wie Reaktor, Netty, Undertow), haben eine Reihe von reaktionsschnellen ClienthttpRequest- und ClienthttPesponse -Abstraktionen angenommen, die Anfragen und Antwortkörper als Flux <DatenBuffer> aufdecken und eine umfassende Backdruckunterstützung auf der Lesen- und Schreibseite bereitstellen.
Feder 5 Framework führt Reaktor als Implementierung der Reaktivströmespezifikation ein.
Reaktor ist die reaktive Bibliothek der nächsten Generation zum Aufbau von nicht blockierenden Anwendungen auf der JVM.
Reaktor erweitert den Publisher -Vertrag von Basic Reactive Streams und definiert Fluss- und Mono -API -Typen, um deklarative Operationen für Datensequenzen von 0..N bzw. 0..1 bereitzustellen.
Spring Web Reactive verwendet Servlet 3.1, um nicht blockierende E/A und Läufe auf Servlet 3.1-Behältern bereitzustellen.
Spring WebFlux bietet zwei Programmiermodelle zur Auswahl.
Spring 5 umfasst Spring-Webreaktiv (unter dem Spring-Web-reaktives Modul) und Spring Web MVC (unter dem Spring-WebMVC-Modul).
Obwohl Spring Web Reactive und Spring Web MVC-Module viele Algorithmen teilen, da Spring Web Reactive auf der HTTP-Adapterschicht nicht blockierende reaktive reaktive Streams ausgeführt werden kann, teilen sie keinen Code zwischen ihnen.
Die Ausführung von Spring MVC erfordert einen Servlet-Container, während Spring Web Reactive auch auf Nicht-Service-Laufzeiten wie auf Netty und Undertow ausgeführt werden kann.
Wenn Sie einen nicht blockierenden Webstapel mit einem leichten, funktionalen Web-Framework verwenden und mit Java 8 Lambda oder Kotlin verwenden müssen, sollten Sie in Betracht ziehen, von Spring MVC-Anwendungen auf Spring-Web-Reaktiv zu wechseln.
Dies ist eine 2,0.0 M5 -Version von pom.xml, die auf WebFiux beruht.
<Ters </Groupid> org.springFramework.boot </Groupid> <artifactID> Spring-Boot-Starter-Parent </artifactId> <version> 2.0.0.m5 </Version> </parent> <ding <artifactid> Spring-Boot-Starter-Webflux </artifactid> </abhängig> </abhängigkeiten>
Traditionelle Methode vs. Antwortmethode
Bei herkömmlichen Methoden wird die Ausführung blockiert und wartet, bis Ihre Serviceausführung abgeschlossen ist. Im folgenden Code wird nach der ersten Druckanweisung die Programmausführung blockiert und wartet, bis die Serviceausführung abgeschlossen ist. Nach Abschluss der Serviceausführung wird die Programmausführung wieder aufgenommen und eine zweite Druckanweisung ausgeführt.
@Getmapping ("/traditional") publiclist <produkt> getAllProducts () {System.out.println ("traditioneller Weg gestartet"); LIST <produkte> products = processerService.getProducts ("traditionell"); System.out.println ("traditioneller Weg abgeschlossen"); Produkte zurückgeben;}Bei der Antwortmethode wird die Programmausführung fortgesetzt, ohne auf die Fertigstellung der Serviceausführung zu warten. Im folgenden Code wird nach der ersten Druckanweisung die zweite Druckanweisung nicht blockierend ausgeführt, ohne auf die Ausführung der Dienstausführung zu warten. Der Flussstrom wird mit der Verfügbarkeit von Produktdaten besiedelt.
@GetMapping (value = "/reactive", .text_event_stream_value) public flux <produkt> getAll () {System.out.println ("reaktiver Weg mit Flux gestartet"); Flux <produkt> fluxProducts = prodService.getProductsStream ("Flux"); System.out.println ("reaktiver Weg mit Flussabschluss"); FluxProducts zurückgeben;}Zusätzlich zum vorhandenen RestTemplate führte Spring 5 auch reaktives Webclient ein.
Die ClienthttpRequest- und ClienthttPesponse -Abstraktionen enthüllen die Anforderungs- und Antwortkörper mit Flux <Datenabuffer> und bieten sowohl auf der Lese- als auch auf der Schreibseite den vollständigen Backdruckunterstützung.
Auf der Clientseite werden auch Encoder- und Decoderabstraktionen aus dem Federkern verwendet, um Endian -Flus in Typobjekte zu serialisieren oder zu übertragen.
Hier ist ein Beispiel für einen reaktiven Webclient, der das Terminal aufruft und reaktive Stromflussobjekte empfängt und Prozesse empfängt.
@GetMapping ("/concusses/{id}/alerts") public flux <Alert> getAccountArts (@PathVariable Long ID) {webclient webclient = newClient (new ReactorClientHttpConnector ()); return this.repository.getAccount (id) .flatMap (Konto -> webclient.perform (get ("/allert/{key}", conto.getKey ()). extrahieren (bodyStream (alert.class));};};Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.