Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux
Responsive Programming implementiert eine hohe Parallelität, nicht blockierende Dienste mit geringer Latenz in Java durch Project Reactor und Spring WebFlux. 1. Project Reactor bietet zwei Kerntypen: Mono und Fluss, unterstützt die deklarative Verarbeitung asynchroner Datenflüsse sowie Konvertiten, Filter und andere Operationen über Operatorketten; 2. Spring WebFlux basiert auf Reaktor und unterstützt zwei Programmiermodelle für Annotations- und Funktionsmodelle. Es läuft auf nicht blockierenden Servern wie Netty und kann große Mengen gleichzeitiger Verbindungen effizient verarbeiten. 3. Die Verwendung von WebFlux-Reaktor kann die Parallelitätsfunktionen und die Ressourcenauslastung in I/O-intensiven Szenarien verbessern, natürliche Streaming-Kommunikation wie SSE und Websocket unterstützt und sich nahtlos in reaktionsschnelle Datenbanken wie R2DBC und MongoDB integriert. V. 5. Obwohl die Lernkurve steil und für CPU-intensive Aufgaben nicht geeignet ist, kann diese Kombination den Systemdurchsatz und die Widerstandsfähigkeit in Microservices, Gateways und Echtzeitsystemen erheblich verbessern und ist es wert, in geeigneten Szenarien eingesetzt zu werden.
Die reaktive Programmierung ist in den letzten Jahren in Java immer wichtiger geworden, insbesondere in modernen Webanwendungen mit hoher Parallelität und geringer Latenz. Mit Project Reactor und Spring WebFlux können Java-Entwickler problemlos nicht blockierende, ereignisgesteuerte Dienste erstellen. Schauen wir uns an, wie sie zusammenarbeiten und warum Sie sie verwenden sollten.

Was ist reaktionsschnelle Programmierung?
Responsive Programmierung ist ein Programmierparadigma für den Datenfluss und die Änderung der Ausbreitung . Sie können asynchrone Datenströme deklarativ verarbeiten, wie z. B. HTTP -Anforderungen, Datenbankantworten, Nachrichtenwarteschlangen usw.
Bei der traditionellen Blockierungsprogrammierung nimmt jede Anfrage einen Thread ein und wartet auf die Abschluss des E/A -Vorgangs. Bei reaktionsschnellem Programmieren werden Threads nicht blockiert, sondern nur dann verarbeitet, wenn Daten über den Mechanismus "Rückruf" oder "Veröffentlichungsunterschrift" verfügbar sind.

Projektreaktor: Die Kernbibliothek für reaktionsschnelle Programme
Project Reactor ist eine grundlegende JVM -Bibliothek, die vom Spring -Team für Responsive Systems erstellt wurde. Es handelt sich um eine Implementierung von Reaktor 3 und ist vollständig mit der Reaktivströmespezifikation kompatibel.
Es bietet zwei Kerntypen:

-
Mono<t></t>
: repräsentiert eine asynchrone Sequenz von 0 oder 1 Element (z. B. Ergebnisse der einzelnen Benutzerabfrage) -
Flux<t></t>
: repräsentiert einen asynchronen Datenstrom von 0 bis N -Elementen (z. B. alle Benutzer holen)
// Beispiel: Erstellen Sie einen Fluss Flux <string> names = flux.just ("alice", "bob", "charlie"); // Erstellen Sie ein Mono Mono <string> Single = mono.just ("Hallo");
Sie können diese Streams wie map
, filter
, flatMap
, delayElements
usw. anketten.:
Namen .Map (String :: Touppercase) .Delayelemente (Dauer.Ofmillis (500)) .Subscribe (System.out :: println);
Hinweis: Der obige Code ist nicht blockiert und wird nicht sofort ausgeführt, sondern das Verhalten des Datenflusss "deklarieren" und wird erst ausgelöst, wenn ein "Abonnenten" erscheint.
Spring WebFlux: Responsive Web Framework
Spring WebFlux ist ein reaktionsschnelles Web -Framework, das von Spring 5 eingeführt wird. Es kann herkömmliche Spring -MVC ersetzen und unterstützt zwei Programmiermodelle:
Annotierter Controller (ähnlich wie bei Spring MVC):
@Restcontroller öffentliche Klasse UserController { @Getmapping ("/user") public flux <user> getAllusers () { return userService.findall (); // Flux <Bener> zurückgeben } @Getmapping ("/user/{id}") public mono <Bene> getUserById (@PathVariable String id) { return userService.findbyId (id); // mono <user> zurückgeben } }
Funktionales Routing -Modell (leicht, funktional):
@Bohne öffentliche Routerfunktion <ServerResponse> Route (UserHandler -Handler) { Return Route (get ("/user"), Handler :: GetAllusers) .Androute (get ("/user/{id}"), Handler :: GetUserById); }
WebFlux unterstützt nicht blockierende Server wie Netty und Undertow, Netty wird empfohlen (der Standard ist in Spring Boot eingebettet, um Reaktor Netty zu verwenden).
Warum WebFlux -Reaktor verwenden?
Höhere Parallelitätsfähigkeit
Der traditionelle Tomcat nimmt einen Thread pro Anfrage ein und der Thread -Pool ist begrenzt. WebFlux verwendet eine kleine Anzahl von Ereignisschleifen -Threads (Ereignisschleifen), mit denen Tausende von gleichzeitigen Verbindungen verarbeitet werden können.Bessere Ressourcenauslastung
Nicht blockierende I/A reduziert das Warten von Faden, die CPU und die Speicherverwendung effizienter.Natürliche Unterstützung für Streaming -Daten
Solche Szenarien wie SSE (Server-Sent-Ereignisse), Websocket, Dateifluss, Echtzeit-Push usw. sind sehr geeignet.Nahtlose Integration in Frühlingsöko
Unterstützt reaktionsschnelle MongoDB, PostgreSQL (über R2DBC), Redis (Salat), Kafka usw.
Empfehlungen und Vorsichtsmaßnahmen für den Gebrauch
Obwohl die Vorteile der reaktionsschnellen Programmierung offensichtlich sind, handelt es sich nicht um eine Silberkugel. Hier sind ein paar wichtige Punkte:
- ✅ Geeignet für I/O-intensive Szenarien : Aufrufen externer APIs, Datenbankzugriff und Nachrichtenverarbeitung.
- Es ist nicht für CPU-intensive Aufgaben geeignet : Reaktionsfähigkeit verbessert die Rechenleistung nicht, kann jedoch die Komplexität erhöhen.
- ⚠️Don Mix of Mix Blocking Code : Aufrufen von
Thread.sleep()
oder Blockierung des Datenbankzugriffs imMono/Flux
zerstört den reaktionsschnellen Vorteil. - ? Vermeiden Sie das Schreiben von Geschäftslogik in Abonnement : Versuchen Sie, die Verarbeitung der Bedienerkette zu verwenden, um den funktionalen Stil aufrechtzuerhalten.
- ? Die Lernkurve ist steiler : Die Konzepte von Backdruck, Scheduler, heißem und kaltem Fluss erfordern Zeit, um zu meistern.
Praktisches Beispiel: Aufrufen von externer API
Angenommen, wir möchten Benutzerinformationen aus einem externen Dienst erhalten und die Konvertierung durchführen:
@Service Public Class Userservice { private endgültige webclient webclient = webclient.create ("https://api.example.com"); public mono <user> fetchuser (String -ID) { return webclient.get () .uri ("/user/{id}", id) .abrufen() .bodytomono (externaluser.class) . .Timeout (duration.ofseconds (3)) // Timeout Control.OnerRorreturn (user.Empty ()); // Fehlergarantie} }
Der gesamte Prozess ist nicht blockiert, und mehrere Anfragen können parallel bearbeitet werden, ohne zusätzliche Threads zu konsumieren.
Zusammenfassen
- Project Reactor bietet grundlegende Operationen für reaktionsschnelle Streams (
Mono
/Flux
) - Spring WebFlux basiert auf Reaktor zur Implementierung von Responsive Web Services
- Kombination der beiden, geeignet für hohe Parallelität, I/O-intensive Anwendungen
- Bei der Verwendung müssen Sie vermeiden, Operationen zu blockieren und den Mechanismus zur Rückdruck- und Planungsmechanismus zu verstehen
Responsive Programmierung ist nicht überall notwendig, aber im richtigen Szenario kann es den Durchsatz und die Belastbarkeit des Systems erheblich verbessern. Wenn Sie ein Microservice-, Gateway-, Echtzeit-Schnittstellen- oder Stream-Verarbeitungssystem erstellen, verdient WebFlux-Reaktor ernsthafte Überlegungen.
Grundsätzlich ist alles, nicht kompliziert, aber es ist leicht, Details zu ignorieren.
Das obige ist der detaillierte Inhalt vonReaktive Programmierung in Java mit Projektreaktor und Spring WebFlux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Verwendung von SLF4J in Kombination mit Logback oder Log4J2 ist die empfohlene Möglichkeit, Protokolle in Java -Anwendungen zu konfigurieren. Es wird API- und Implementierungsbibliotheken eingeführt, indem entsprechende Maven -Abhängigkeiten hinzugefügt werden. 2. Rufen Sie den Logger durch den LoggerFactory von SLF4J im Code und schreiben Sie mit parametrisierten Protokollierungsmethoden entkoppelten und effizienten Protokollcode. 3. Definieren Sie das Protokoll -Ausgangsformat, die Ebene, das Ziel (Konsole, die Datei) und die Paket -Level -Protokollregelung über logback.xml oder log4j2.xml Konfigurationsdateien; 4. Aktivieren Sie optional die Funktionsscanning -Funktion der Konfigurationsdatei, um eine dynamische Anpassung der Protokollebene zu erreichen, und Springboot kann auch über den Aktuatorendpunkte verwaltet werden. 5. Befolgen Sie Best Practices, einschließlich

Erstellen Sie einen WebSocket -Serverendpunkt, um den Pfad mit @Serverendpoint zu definieren und Verbindungen, Nachrichtenempfang, Schließen und Fehler über @onopen, @onMessage, @onclose und @onError zu behandeln. 2. Stellen Sie sicher, dass Javax.Websocket-API-Abhängigkeiten während der Bereitstellung eingeführt und automatisch vom Container registriert werden. 3. Der Java -Client erhält WebSocketContainer über den ContainerProvider, ruft ConnectToServer auf, um eine Verbindung zum Server herzustellen, und empfängt Nachrichten mit @ClientendPoint -Annotationsklassen. 4. Verwenden Sie die Sitzung GetBasicre

Vorbereitungsdauerung von MajoringMavenorgradletobuildajarorwarfile, ExternalizingConfiguration

Castorensxml-to-javaObjectMappingviadefaultConventionsorexplicitMapPingFiles; 1) DefineJavaclasses witgers/setzer;

Um PhpMyAdmin effektiv zu schützen, müssen mehrere Sicherheitsmaßnahmen ergriffen werden. 1. Beschränken Sie den Zugriff über IP, nur vertrauenswürdige IP -Verbindungen sind zulässig. 2. Ändern Sie den Standard -URL -Pfad zu einem Namen, der nicht leicht erraten ist. 3. Verwenden Sie starke Passwörter und erstellen Sie einen dedizierten MySQL-Benutzer mit minimierten Berechtigungen. Es wird empfohlen, die Zwei-Faktor-Authentifizierung zu aktivieren. V. 5. Stärken Sie den Webserver und die PHP -Konfiguration, deaktivieren Sie gefährliche Funktionen und begrenzen Sie die Dateiausführung. 6. HTTPS zum Verschlüsseln der Kommunikation erzwingen, um Anmeldeinformationen zu verhindern; 7. Deaktivieren Sie PhpMyAdmin, wenn Sie nicht verwendet werden, oder erhöhen Sie die HTTP -Grundauthentifizierung; 8. Überwachen Sie regelmäßig Protokolle und konfigurieren Sie Fail2ban, um sich gegen Brute Force Cracking zu verteidigen. 9. Setup löschen und

SureAutofillisenabledByChecking "EnableFillHandleandCellDrag-und-drop" Infile> Optionen> Fortgeschritten; 2. KorrekturysetheFillHandle-Thesmallsquareatthebottom-arrytheSelectedCell-DRAGGINGWITHETHEBLACKLUSOR, NOTHEWHITHITEWHETHESELTET;

TheassertKeywordinjavaisUsedTovalidateAsStionsduringDevelopment, ThrowinganasStorionErroriftheConditionisfalse.2.ithastWOforms: AssertCondition; andassertCondition: message; withelatterProvrididing -Kustomerform
![Sie verwenden derzeit keine an eine NVIDIA GPU angehängte Anzeige [behoben].](https://img.php.cn/upload/article/001/431/639/175553352135306.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Ifyousee "youarenotusingAdisplayAttachedToannvidiagpu", sorgthyourMonitorisconnectedTotenvidiagpuport, configuredisplaysetingsinnvidiaControlpanel, aktualisiertesRiversusingdduandcleanInstall und SetthePrimarygputodiscretetIniNBiScreteInbios/uefi.restartafartafartafarfArtartafarfaTafarygputodiscreteInbios/uefi
