web-dev-qa-db-ja.com

Spring Mvcとwebfluxを一緒に使用できますか?

1つのプロジェクトで2つのアプローチ(反応性と標準)を使用したいと思います。

1つREST APIエンドポイントをリアクティブwebfluxに移行して、残りを移行する前にパフォーマンスをテストしようとしましたが、機能しませんでした。ルーターとハンドラーを追加しましたが、機能しなくなりました削除する spring-boot-starter-web依存関係から、無効にする@RestController httpを取得しました404常にコーディングします。それは可能ですか?または、すべてのプロジェクトを事後対応型アプローチに移行する必要がありますか?

19

Spring Bootのリファレンスドキュメントで説明されているように、 MVCとWebFluxの両方が利用可能な場合、Spring BootはSpring MVCアプリケーションを自動構成します 。これにはいくつかの理由があります。

  • Spring MVCはNettyで実行できません
  • 両方のインフラストラクチャが同じ仕事(たとえば、静的リソースの提供、マッピングなど)で競合する
  • 同じコンテナ内で両方のランタイムモデルを混在させることは良い考えではなく、パフォーマンスが悪いか、まったく機能しない可能性があります。

あなたが達成しようとしている目標に応じて、これに取り組むいくつかの方法があるかもしれません。

WebClientを使用して複数の同時リモートHTTP呼び出しを最適化し、Reactor演算子を使用したい場合は、Spring MVCアノテーション付きコントローラーを引き続き使用し、戻り値として反応型を返すことができます( これについての詳細この春のブートトークで )。

純粋なスケーラビリティとレイテンシ(必ずしも生のスループットとは限らない)で作業したい場合は、spring-boot-starter-webfluxの使用を開始して、そこから作業できます。ブロッキングAPIの使用(ブロッキングデータベース呼び出しのような)は禁止されており、それらをFluxまたはMonoでラップし、個別のスレッドプールで動作するようにスケジューリングすると、パフォーマンスの面で効果がありません。

最後に、Spring WebFluxが提供する機能的アプローチを使用したい場合、必ずしもパフォーマンスが向上するとは限りません。それは本当にあなたのユースケースとそれをどのように実装するかに依存します。

17
Brian Clozel