Правильный способ вернуть данные из реактивного DAO в контроллер при использовании реактивного драйвера MongoDB для Java - PullRequest
0 голосов
/ 14 июня 2019

Я использую реактивный драйвер MongoDB для Java. У меня есть DAO, где я запрашиваю БД, используя цепочку функций find().first(), которая возвращает Publisher<Document>. Мне нужно вызвать subscribe() (иначе запрос фактически не будет выполнен) в этом экземпляре Publisher, где я делаю некоторые сравнения в обратных вызовах onNext(Document) и onError(Throwable). Согласно моей логике, я должен возвращать некоторые значения из моей функции, но оба этих метода обратного вызова являются пустыми.

Я могу создать уродливую логику, в которой я блокирую внутри обратного вызова и устанавливаю свое возвращаемое значение как значение AtomicReference, которое я объявляю вне обратных вызовов, а затем возвращаю значение в AtomicReference. Но при этом я блокирую, а блокировать - это то, что я не хочу делать.

Как мы можем запросить значения, сравнить результат и затем вернуть наш собственный вид результата на основе сравнения (все от DAO до Контроллера) реактивным способом? Если шаблон проектирования, который существует для выполнения операций такого типа, что это такое?

Я использую Micronaut в качестве веб-фреймворка.

...