8

Ich habe Spring Tips: Functional Reactive Endpoints with Spring Framework 5.0 angesehen und ein wenig über Federreaktor lesen, aber ich kann es nicht ganz verstehen.Spring Reactor & Netty vs Tomcat http

Was sind die Vorteile von Endpunkten Flux/Mono Instanzen (jacksonified) anstelle von geraden dto Objekte (jacksonified), da ich netty und Federreaktor aktiv haben? Ich nahm zunächst an, dass reaktive Ströme im HTTP-Anfrage-/Antwort-Kontext eher wie Websockets funktionieren würden, wobei der Server die Daten mit einem offenen Kanal an den Empfänger sendet, aber dies scheint nicht der Fall zu sein.

Auch was Netty tatsächlich besser in der reaktiven Programmierung als Tomcat tut?

Es tut mir leid, wenn diese Fragen dumm scheinen, aber ich verstehe nicht ganz den Zweck dieser neuen Framework-Richtung. Warum ist es dazu gekommen, wie funktioniert es und welche Probleme löst es?

Antwort

7

Ich schlage vor, dass Sie die vor kurzem in Devoxx Belgien "Reactive Web Application with Spring 5" by Rossen Stoyanchev präsentiert.

Dort spricht er darüber, wie die Reactive Web-Controller (unten dargestellt) auf der Oberfläche sieht aus wie Spring MVC HTTP Servlet Request/Response-Controller aber es ist eigentlich nicht

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

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

er spricht darüber, wie Servlet 3.1 obwohl non-blocking nicht wirklich funktioniert, um vollständig reaktiv zu sein und wie der glue code, der das Servlet 3.1 und Reactive Streams verbindet, als Teil der Spring 5 Änderungen für die Servlet 3.1 konformen Webcontainer (Jetty und Tomcat) implementiert wird.

Und natürlich berührt er vollständig reaktive non-blocking-konforme Server (Netty, Undertow) werden unterstützt, um Reactive Streams zu betreiben.

1

Es ist nicht richtig zu meinen, Netty ist besser als Tomcat. Die Implementierung ist anders. Tomcat verwendet Java NIO, um Servlet 3.1-Spezifikation zu implementieren. In der Zwischenzeit verwendet Netty auch NIO, führt aber eine benutzerdefinierte API ein. Wenn Sie einen Einblick bekommen möchten, wie Servlet 3.1 in Netty implementiert ist, sehen Sie sich dieses Video https://youtu.be/uGXsnB2S_vc

an