2017-12-15 3 views
1

Ich habe ein Spring boot 2.0.0.M7 Projekt mit der webflux starter erstellt, weil ich alle asynchronen und non-blocking Fähigkeiten verwenden möchte. Ich habe die server.servlet.context-path hinzugefügt, aber es funktioniert nicht, wenn ich auch den Webstarter nicht hinzufüge.WebFlux Web und Webflux Starter

Wenn ich beide Starter hinzufüge, kann ich Probleme mit der nicht blockierenden Funktionalität haben? Ich habe einige Stresstests mit Gatling durchgeführt und ich habe die gleichen Bewertungen erhalten, indem ich den Webstarter entfernt oder hinzugefügt habe.

Irgendwelche Hilfe dabei?

Antwort

0

Wenn Sie sowohl spring-boot-starter-web als auch spring-boot-starter-webflux zu Ihrer Anwendung hinzufügen, wird Spring Boot diese als Spring MVC-App konfigurieren.

Dies ist beabsichtigt, da viele Spring MVC die Webflux-Abhängigkeit erhalten wird, um die neuen WebClient in ihren MVC-Apps zu nutzen. Ab Spring Framework 5 kann Spring MVC auch einige Fälle mit Flux auf Controller-Ebene behandeln.

Sie können jederzeit Ihre Wahl wie diese zwingen:

SpringApplication app = new SpringApplication(MyApplication.class); 
app.setWebApplicationType(WebApplicationType.REACTIVE); 
app.run(...); 

In Ihrem Fall, es geht nicht um eine Wahl zu zwingen, sondern etwas verwenden, die nicht in WebFlux unterstützt wird.

Die Konfigurationseigenschaft server.servlet.context-path ist Servlet-spezifisch und funktioniert daher nicht mit WebFlux. Momentan unterstützt Spring Boot keine War-Bereitstellung oder mehrere Webkontexte für WebFlux-Anwendungen. Es macht also keinen Sinn, eine solche Immobilie anzubieten.

Der Laufzeitmodell Unterschied zwischen "Servlet-basierte" und Reaktive Laufzeit mit Spring kann ziemlich subtil sein, und ich ermutige Sie, eine talk that describes those choices zu sehen. Die kurze Antwort lautet: Wenn Sie Spring MVC mit asynchronen Typen verwenden (DeferredResult, Flux oder SseEmitter), werden die Dinge asynchron sein, aber das Lesen und Schreiben wird weiterhin blockiert.

Richtig Benchmarking, das ist ziemlich hart, aber die Ergebnisse, die Sie sehen, werden irgendwie erwartet. Lokales Ausführen von Server + Client, keine Latenz, bei roher Durchsatz - all diese Einschränkungen sollten nicht zugunsten des reaktiven Modells sein, das Nebenkosten hat. Wenn überhaupt, zeigt dieser Benchmark, dass der reaktive Stapel bereits optimiert ist, sogar für nicht ideale Anwendungsfälle!

+0

danke Brian du hast mir sehr geholfen! –

Verwandte Themen