8

Oglądałem Spring Tips: Functional Reactive Endpoints with Spring Framework 5.0 i przeczytałem trochę o reaktorze sprężynowym, ale nie mogę go zrozumieć.Spring reaktor i netty vs tomcat http

Jakie są zalety zwracania punktów końcowych Flux/Mono instancji (jacksonified) zamiast prostych obiektów dto (jacksonified), biorąc pod uwagę, że mam reaktor netty i sprężynowy aktywny? Początkowo zakładałem, że strumienie reaktywne będą, w kontekście żądania/odpowiedzi HTTP, działać bardziej jak strony internetowe, w których serwer przesyła dane do odbiornika z otwartym kanałem, ale wydaje się, że tak nie jest.

Co właściwie robi netty lepiej w programowaniu reaktywnym niż tomcat?

Przykro mi, jeśli te pytania wydają się głupie, ale nie do końca rozumiem cel tego nowego kierunku ramowego. Dlaczego tak się stało, jak działa i jakie problemy rozwiązuje?

Odpowiedz

7

Gorąco polecam obejrzeć niedawno zaprezentowany w Devoxx w Belgii "Reactive Web Application with Spring 5" by Rossen Stoyanchev.

Tam opowiada o tym, jak Reactive Web Kontroler (przedstawiony poniżej) na powierzchni wygląda Wiosna MVC HTTP Servlet Request/Controller Response ale to właściwie nie

@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(); 
} 

mówi o tym, jak Servlet 3.1 mimo że nieblokowanie nie działa prawidłowo w pełni reaktywne i jak kod kleju łączący strumienie Servlet 3.1 i Reactive jest zaimplementowany jako część zmian Spring 5 dla kontenerów internetowych zgodnych z Servlet 3.1 (Jetty i Tomcat).

I oczywiście dotyka on w pełni reaktywnych serwerów bez blokady (Netty, Undertow), które są obsługiwane do uruchamiania strumieni reaktywnych.

1

To nie znaczy, że Netty jest lepsze niż kocur. Implementacja jest inna. Tomcat używa java NIO do implementacji specyfikacji serwletu 3.1. W międzyczasie netty używa również NIO, ale wprowadza niestandardowe API. Aby uzyskać wgląd w sposób implementacji serwletu 3.1 w Netty, obejrzyj ten film wideo: https://youtu.be/uGXsnB2S_vc