Spring Web Reactive | 6. Reactive Libraries

spring-webfluxreactor-coreに依存し、内部で非同期ロジックを構成してReactive Streamsをサポートします。一般にWebFlux APIはFluxまたはMonoを返し、入力として任意のReactive Streams Publisher実装を受け取ることができます。FluxMonoの区別は、1つまたは複数の非同期値が想定されるかというカーディナリティを表すため重要です。これはHTTPメッセージのエンコードやデコード方法を決める際に不可欠です。

アノテーション付きコントローラーでは、WebFluxはアプリケーションが選択したリアクティブライブラリに透過的に適応します。これはReactiveAdapterRegistryによって処理されます。このレジストリは、リアクティブライブラリやその他の非同期型に対するプラグイン可能なサポートを提供します。RxJava 2/3、Reactive Streamsブリッジを介したRxJava 1、CompletableFutureがサポートされ、追加のアダプターも登録できます。

Spring Framework 5.3以降、RxJava 1のサポートは非推奨です。

関数型エンドポイントWebClientなどの関数型APIでは、一般的なWebFlux APIの規則が適用されます。戻り値にはFluxまたはMonoを使用し、入力にはReactive Streams Publisherを受け取ります。カスタムまたは別のリアクティブライブラリが提供するPublisherは、未知の0..Nセマンティクスを持つストリームとしてのみ扱われます。セマンティクスが分かっている場合は、Publisherを直接渡さず、FluxまたはMono.from(Publisher)でラップできます。

たとえば、MonoではなくPublisherを指定すると、Jackson JSONメッセージライターは複数の値を想定します。メディアタイプがapplication/json+streamなどの無限ストリームを表す場合、値は個別に書き込まれてフラッシュされます。それ以外の場合、値はバッファリングされ、JSON配列としてレンダリングされます。