sql >> データベース >  >> NoSQL >> MongoDB

ReactiveMongoRepositoryオブジェクトから戻ってきたMonoオブジェクトでblock()を実行中に例外が発生する

    ブロッキングは、応答を待機しているスレッドを拘束するため、悪い結果になります。 とても 自由に使えるスレッドがほとんどなく、なしになるように設計されているリアクティブフレームワークでは良くありません。 そのうちの1つを不必要にブロックする必要があります。

    これは、リアクティブフレームワークが回避するように設計されていることそのものであるため、この場合は、単にそれを停止します。

    対照的に、新しいコードは非同期で機能します。リポジトリが値(そしてsavedQuote.subscribe()に渡したラムダ)を返すまで実際には何も起こらないため、スレッドはブロックされません。 が実行され、結果がコンソールに出力されます。)

    ただし、サブスクライブメソッドですべてのロジックを実行しているため、リアクティブストリームの観点からは、新しいコードはまだ最適/正常ではありません。通常は、一連のflatMap / map呼び出しを使用してストリーム内のアイテムを変換し、doOnNext()を使用します。 副作用(値の印刷など)の場合:

    stockQuoteClient.getQuoteStream()
                .log("quote-monitor-service")
                .flatMap(quoteRepository::insert)
                .doOnNext(result -> System.out.println("I saved a quote! Id :: " + result.getId())))
                .subscribe();
    

    リアクター/リアクティブストリームで深刻な量の作業を行っている場合は、一般的にそれらを読む価値があります。これらはノンブロッキング作業には非常に強力ですが、より「標準的な」Javaとは異なる考え方(およびコーディング)が必要です。




    1. フラスコを起動する前に(起動していない場合は起動して)、redisが実行されているかどうかを確認するにはどうすればよいですか?

    2. spring-data-mongodbフレームワークでBigDecimalをDoubleに変換する方法

    3. MongoDBクエリ結果をCSVファイルにエクスポートする方法

    4. mongoengine saveメソッドは非推奨ですか?