1

IllegalStateException が原因で発生した MonoError を受け取りました。原因は「基になる HTTP クライアントが応答を発行せずに完了しました」です。

NetworkList は、ネットワーク トポロジのリストを含むクラスであり、メソッド convertJsonToPojo 内から呼び出される setList を持ちます。

client は、reactor-netty (0.7.5.RELEASE) を使用する Spring 5 (5.0.4.RELEASE) の WebClient (spring-webflux) です。

次のスニペットは、WebClient を使用して type = BOARDS、CARDS、PORTS、ROUTERS などへの非同期呼び出しを行う方法を示しています。ネットワーク名は projectName として渡され、トポロジ タイプは type として渡されます。

NetworkList netList = new NetworkList();    
client.get().uri("/{project}/{type}",projectName,type).retrieve().bodyToMono(String.class).subscribe(json -> this.convertJsonToPojo(Type.BOARD, json, netList));

私が攻撃している残りのサービスは、要求されたコンポーネントを表す json を返す特異なサービスです。

これはReactive WebClient Not Emitting A Responseに似ていますが、次の reactor-netty issue Issue 138へのポイント内の応答です。その問題は、0.6.6.RELEASE で修正されたことを示します。

私の質問は、WebClient を無意識のうちに間違って使用しているのか、それとも未修正のバグとして提出する必要があるのか​​ということです。私はSpring 5とReactiveライブラリにかなり慣れていないので、単純にバグを送信したくありません.

よろしくお願いします!

PS - 私はこれを RestTemplate と CompletableFuture と連携させているので、代わりにその提案を提供する必要はありません。私の任務は、リアクティブ アーキテクチャへの移行を開始することです。ありがとうございました!

更新 - 何が起こっているのか理解できたと思いますが、誰かからの確認が必要です. 私が攻撃している残りのサービスは、従来のサービスであり、リアクティブ ストリームではありません。したがって、通話中に共有される「ステージ」の更新はありません。.subscribe() はリアクティブ ストリームを予期しているため、完全なステージを受信して​​いません。.subscribe() を .block() に置き換えると、完了が強制され、コードが機能するようになりました。このことから私が学んだことは、従来のレスト サービスを扱う場合、ブロックが必要であるということです。誰かがそれを確認できますか?ありがとうございました!

4

0 に答える 0