3

APIは、処理する必要があるデータのようなオブジェクトの配列を持つ JSON オブジェクトで応答します。{"items":[{...},{...},...],...問題は、配列に + 1.000 個のオブジェクトがあり、エンドポイントの応答が遅いため、ストリーミングが完了するまでに数秒かかることです。また、Apache HttpClientを使用してエンドポイントを消費し、Jacksonを使用して応答をシリアル化する「ブロッキング」プログラミング モデルを使用しています。 、配列を含むすべてのオブジェクトを解析するために完全なボディを取得するのを待ちます。要素が処理されたら、使用されているメモリを解放するために GC に任せることができるため、メモリ使用量を節約できます。要素によって。

データが来ている間にReactor プロジェクトで応答を使用するにはどうすればよいですか? 使用している HTTP クライアントやシリアライザーを変更しても問題ありません。また、Spring 4.3 の Spring MVC で Java 8 を使用していますが、プロジェクトを Spring の今後のリリースに移行できます。

: エンドポイントはサード パーティの API であり、HTTP 1.1 サーバーへの単純な GET です。ページネーションの追加など、その動作方法を変更することはできません。

4

1 に答える 1

2

このユース ケースは、今後の Spring Web Reactive フレームワークでサポートされます。現在、Spring Framework 5.0 M3で利用可能で、 Spring Boot 2.0 + Web Reactive 依存関係を選択すると start.spring.io を介して利用できます。

Fluxの入力パラメーターまたは戻り値を使用している場合、処理のすべてのステップは非同期で非ブロッキングであり、Jackson を使用して個々の要素をシリアライズし、大きくて有限の可能性がある要素のストリームをシリアライズ/デシリアライズできるようにします。その場合、Spring は、逆シリアル化のために配列内の個々の JSON 要素を識別したり、シリアル化のために JSON 配列の と を追加したり[,ます]。これにより、Twiter JSON API のような JSON ストリームを使用することもできます。

Jackson が非同期のノンブロッキング処理をサポートするとすぐに、それをネイティブで使用するように Spring Framework 5 コーデックを更新することに注意してください。

于 2016-11-15T16:05:32.107 に答える