MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Получаване на изключение, докато се прави block() на Mono обект, който получих от ReactiveMongoRepository обект

Блокирането е лошо, тъй като свързва нишка, чакаща отговор. Това е много лошо в реактивна рамка, която има малко нишки на свое разположение и е проектирана така, че нито една от тях трябва да бъдат ненужно блокирани.

Това е точното нещо, което реактивните рамки са проектирани да избягват, така че в този случай просто ви спира да го правите:

Вашият нов код, за разлика от това, работи асинхронно. Нишката не е блокирана, тъй като всъщност нищо не се случва, докато хранилището не върне стойност (и след това ламбда, която сте предали на 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.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намерите документ и единичен поддокумент, отговарящ на зададени критерии в колекцията MongoDB

  2. ГРЕШКА:дъщерен процес е неуспешен, излязъл е с номер на грешка 51 MongoDB

  3. Необходимо е да се изчисли разликата между датата и часа за полето за дата и час, записано във формат на низ в MongoDB

  4. Mongo агрегиране срещу Java за цикъл и производителност

  5. MongoDB предоставя основна система за удостоверяване. Променен ли е във версия 2.2.3?