sql >> Database >  >> NoSQL >> MongoDB

Uitzondering krijgen tijdens het doen van block() op Mono-object Ik kreeg terug van ReactiveMongoRepository-object

Blokkeren is slecht, omdat het een thread verstrikt die wacht op een reactie. Het is erg slecht in een reactief raamwerk dat weinig threads tot zijn beschikking heeft, en is zo ontworpen dat geen daarvan moeten onnodig worden geblokkeerd.

Dit is precies wat reactieve frameworks zijn ontworpen om te vermijden, dus in dit geval houdt het je gewoon tegen om het te doen:

Uw nieuwe code daarentegen werkt asynchroon. De thread wordt niet geblokkeerd, omdat er niets gebeurt totdat de repository een waarde retourneert (en dan de lambda die je hebt doorgegeven aan savedQuote.subscribe() wordt uitgevoerd, drukt u uw resultaat af naar de console.)

De nieuwe code is echter nog steeds niet optimaal / normaal vanuit het perspectief van reactieve streams, omdat je al je logica doet in je abonneermethode. De normale gang van zaken is voor ons een reeks flatMap/map-aanroepen om de items in de stream te transformeren en doOnNext() te gebruiken voor bijwerkingen (zoals het afdrukken van een waarde):

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

Als je serieus werk doet met reactor / reactieve stromen, zou het de moeite waard zijn om er in het algemeen over te lezen. Ze zijn erg krachtig voor niet-blokkerend werk, maar ze vereisen wel een andere manier van denken (en coderen) dan meer "standaard" Java.




  1. MongoDB GeoSpatial Index gebruiken in C++

  2. Een woordenboek opslaan en ophalen met redis

  3. Kopieer map met wildcard van docker-container naar host

  4. Mongo Bulk Insert over meerdere collecties