Моноразница с Flux <T>в весеннем webflux - PullRequest
0 голосов
/ 22 октября 2018

Насколько я понимаю, Mono<List<T>> является синхронизированным Flux<T>, и Flux не может быть ответом API остальных.

Я прав?

Если нет, в чем разница между Mono<List<T>> и Flux<T> или может Flux быть ответом api rest в некоторых местах?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018
  • Mono<List<T>> выдаст ноль или максимум один список элементов типа T.
  • Flux<T> будет излучать ноль или много элементов типа T

Momo Обертки ограничены, а Flux - нет.

Mono<List<T>> - это синхронизированный Flux

Mono и Flux являются Reactor реализацией интерфейса Publisher, указанного в Спецификации реактивного потока .

Реактор Моно класс: public abstract class Mono<T> implements Publisher<T> {...}

Реактор Моно класс: public abstract class Flux<T> implements Publisher<T> {...}

Поток не может быть ответом API покоя.Конечно, Flux может использоваться в качестве типа ответа REST API.Используя Flux в качестве типа возврата, вы можете легко переключаться с асинхронной на синхронную обработку.Если вы используете Spring Boot, вы даже можете передавать потоковые данные своему потребителю, просто изменив Content-Type своей конечной точки API на application/stream+json, как упомянуто @ Brian.

Обратите внимание, что Flux и Mono не являютсяблокировка, что означает, что ваши рабочие потоки (ресурсы компьютера) могут использоваться более эффективно.

0 голосов
/ 22 октября 2018
  • в качестве типа возврата, Mono<List<T>> означает, что вы получите асинхронно полный список T элементов за один снимок.
  • Flux<T> означает, что вы получите ноль длямножество T элементов, возможно, один за другим по мере их поступления.

Если вы получаете такие типы возврата от клиента HTTP, такие как WebClient, Mono<List<T>> и Flux<T>, возможно,более или менее эквивалентный с точки зрения времени выполнения, если возвращенный Content-Type является, например, "application/json".В этом случае декодер десериализует ответ за один кадр.Единственное отличие состоит в том, что Flux<T> предоставляет более интересные операторы, и вы всегда можете collectList и вернуться к Mono<List>.

С другой стороны, если возвращаемый Content-Type является потоковым,например "application/stream+json" тогда это определенно окажет влияние, так как вы будете получать элементы один за другим по мере их поступления.На самом деле, если возвращаемый поток бесконечен, выбор Flux<T> очень важен, так как другой никогда не завершится.

...