[解決済み] ジップタイプの異なる3つのモノ
2022-02-18 05:20:17
質問
私はSpring Webfluxを使った新しいプロジェクトを始めましたが、このリアクティブ・コーディング・パラダイムについてはかなり初心者です。そのため、初心者のような質問をすることを事前にお詫びします。
私のコントローラメソッドは、レスポンスを
Mono<ResponseEntity<String>>
で、3つの異なるサービスを呼び出すと、3つの異なる
Mono
オブジェクトを作成します。
Mono<CustomObject> customMono = serivce1.method();
Mono<Boolean> booleanMono = service2.method();
Mono<String> stringMono = service3.method();
そこで、レスポンスを用意するために(
Mono<ResponseEntity<String>>
)、次のようなことをする必要があります。
Mono.zip(customMono, booleanMono, stringMono, (customData, booleanData, stringData) -> {
------
return Mono.just(ResponseEntity.ok().body("-----"));
});
問題は、そのような
zip
メソッドで3つの
Mono
と関数をパラメータとする。私はすでにこれを見つけました。
https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#zip-reactor.core.publisher.Mono-reactor.core.publisher.Mono-java.util.function.BiFunction-
しかし、それは私の要件を満たしていない。そこで、私が直面している問題
- を使用することができません。 Mono.mergeWith または Mono.concaWith というメソッドで、Monoオブジェクトの種類が異なるためです。
- すべてのMonoをflatMap/mapし、チェーンを作ることができます。しかし、service2はservice1の呼び出しに依存しないので、別のスレッドで並列に呼び出されるようにしたい。しかし、service3の呼び出しはservice1のレスポンスに依存する。
要約すると、私がしなければならないこと。
- 最初にservice1を呼び出す
- サービス2を別スレッドで呼び出す
- service1呼び出しデータに依存するservice3呼び出しを行う。
-
最終的なレスポンスオブジェクトを生成する (
Mono<ResponseEntity<String>>
) のすべてのサービスコールのデータを使用しています。
よろしくお願いします。初心者なので、どんな提案でもありがたいです。
どのように解決するのですか?
特定の条件下では
Mono.zipWhen()
これにより、3番目のサービスコールは、サービスコール1からの応答から必要なデータを取得することができます。
Mono.zip(monoResponse1,monoResponse2).zipWhen(data ->serviceCall3(data.getT1())).flatMap(response ->{
response.getT1().getT1();//response from mono1
response.getT1().getT2();//response from mono 2
response.getT2();//response from mono 3
return {create your mono response here};
} );
関連
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】Javaの".class期待値"
-
[解決済み】不正なエスケープ文字"㊧"について
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】文字列中の � を置換する方法
-
[解決済み] Javaでパラメータの型の横にある3つの点は何を意味するのですか?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] 3つのブール値のうち、少なくとも2つが真であるかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] テスト