spring-boot-starter-web
とspring-boot-starter-webflux
の両方をアプリケーションに追加すると、SpringBlockはアプリケーションをSpring MVCアプリケーションとして構成します。
多くのSpring MVCのは、彼らのMVCのアプリで新しいWebClient
を活用するwebfluxの依存関係を取得しますので、これは意図的なものです。また、Spring Framework 5の時点で、Spring MVCはコントローラレベルでFluxでいくつかのケースを処理する方法を知っています。
あなたは、常にこのようなあなたの選択を強制することができます。
SpringApplication app = new SpringApplication(MyApplication.class);
app.setWebApplicationType(WebApplicationType.REACTIVE);
app.run(...);
をお使いの場合には、これは選択を強制するのではなくWebFluxではサポートされていないものを使用した話ではありません。
server.servlet.context-path
構成プロパティは、サーブレット固有のものであるため、それはWebFluxでは動作しません。現在のところ、Springブートは、WebデプロイメントやWebFluxアプリケーション用の複数のWebコンテキストをサポートしていません。そのような不動産を提供することには意味がありません。
「サーブレットベース」と「リアクティブランタイム」との間のランタイムモデルの違いは非常に微妙です。talk that describes those choicesを見ることをお勧めします。短い答えは:非同期型(DeferredResult
、Flux
またはSseEmitter
)のSpring MVCを使用している場合、非同期になりますが、読み書きはブロックされます。適切にそれをベンチマーク
は非常に難しいですが、あなたが見ている結果が何とか期待されています。ローカルのサーバ+クライアントを実行し、レイテンシは発生せず、生のスループットを見てください。これらの制約はすべて並行処理コストを伴うリアクティブモデルに優先すべきではありません。何があっても、このベンチマークは、非理想的な使用例であっても、反応性スタックが既に最適化されていることを示しています。
ブライアンに感謝してくれました。 –