Inhaltsverzeichnis
Was ist reaktionsschnelle Programmierung?
Projektreaktor: Die Kernbibliothek für reaktionsschnelle Programme
Spring WebFlux: Responsive Web Framework
Warum WebFlux -Reaktor verwenden?
Empfehlungen und Vorsichtsmaßnahmen für den Gebrauch
Praktisches Beispiel: Aufrufen von externer API
Zusammenfassen
Heim Java javaLernprogramm Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux

Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux

Jul 29, 2025 am 12:04 AM
java Reaktionsschnelle Programmierung

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.

Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux

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.

Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux

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.

Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux

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:

Reaktive Programmierung in Java mit Projektreaktor und Spring WebFlux
  • 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:

  1. 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
        }
    }
  2. 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?

  1. 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.

  2. Bessere Ressourcenauslastung
    Nicht blockierende I/A reduziert das Warten von Faden, die CPU und die Speicherverwendung effizienter.

  3. Natürliche Unterstützung für Streaming -Daten
    Solche Szenarien wie SSE (Server-Sent-Ereignisse), Websocket, Dateifluss, Echtzeit-Push usw. sind sehr geeignet.

  4. 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 im Mono/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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1545
276
Wie konfigurieren Sie die Protokollierung in einer Java -Anwendung? Wie konfigurieren Sie die Protokollierung in einer Java -Anwendung? Aug 15, 2025 am 11:50 AM

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

So senden und empfangen Sie Nachrichten über ein WebSocket in Java So senden und empfangen Sie Nachrichten über ein WebSocket in Java Aug 16, 2025 am 10:36 AM

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

Bereitstellung einer Java -Anwendung Bereitstellung einer Java -Anwendung Aug 17, 2025 am 12:56 AM

Vorbereitungsdauerung von MajoringMavenorgradletobuildajarorwarfile, ExternalizingConfiguration

XML -Datenbindung mit Castor in Java XML -Datenbindung mit Castor in Java Aug 15, 2025 am 03:43 AM

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

PHPMYADMIN -Sicherheits -Best Practices PHPMYADMIN -Sicherheits -Best Practices Aug 17, 2025 am 01:56 AM

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

Excel Autofill funktioniert nicht Excel Autofill funktioniert nicht Aug 15, 2025 pm 01:19 PM

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

Was ist das Assert -Schlüsselwort in Java? Was ist das Assert -Schlüsselwort in Java? Aug 17, 2025 am 12:52 AM

TheassertKeywordinjavaisUsedTovalidateAsStionsduringDevelopment, ThrowinganasStorionErroriftheConditionisfalse.2.ithastWOforms: AssertCondition; andassertCondition: message; withelatterProvrididing -Kustomerform

Sie verwenden derzeit keine an eine NVIDIA GPU angehängte Anzeige [behoben]. Sie verwenden derzeit keine an eine NVIDIA GPU angehängte Anzeige [behoben]. Aug 19, 2025 am 12:12 AM

Ifyousee "youarenotusingAdisplayAttachedToannvidiagpu", sorgthyourMonitorisconnectedTotenvidiagpuport, configuredisplaysetingsinnvidiaControlpanel, aktualisiertesRiversusingdduandcleanInstall und SetthePrimarygputodiscretetIniNBiScreteInbios/uefi.restartafartafartafarfArtartafarfaTafarygputodiscreteInbios/uefi

See all articles