Mono <T>и Flux <T>в качестве параметра в функции - PullRequest
0 голосов
/ 20 мая 2018

Каков вариант использования для Mono<T> и Flux<T> в качестве параметра в функции.

Код

Flux<String> findByLastName(Mono<String> lastname) {
   //implementation
}

Когда я вызываю вышеуказанный метод из покоя, чем будет отличатьсяне используется String.class в качестве параметра?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Чтобы ответить на ваш первый вопрос с комментарием:

@ ErwinBolwidt Я знаю вариант использования для Mono / Flux в вычислениях, но я не понимаю, как конкретно использовать его в качестве параметра метода - Бибек Шакья

Когда вы используете его в качестве параметра, вам приходится иметь дело с ним как с потоком (то есть у вас его еще нет), поэтому, например, вы никогда не должны произносить lastname.block (), потому что это означает, что вы только что заблокировалипоток до тех пор, пока это значение не станет доступным.


Отказ от ответственности Дополнительная информация

Если вы спрашиваете, следует ли с этого момента что-либо оборачивать в моно илипоток, то, конечно, нет, потому что это добавляет ненужную сложность к методу и вызывающей стороне.

А с точки зрения дизайна ответ прост, задавая основные вопросы:

  • Когда вообще использовать Mono?
    • Ну, когда у вас все еще нет значения.
  • Когда вообще использовать Flux?
    • Хорошо, когда у вас есть поток данных или нет.

Поэтому мы не должны думать о том, кто использует метод, и попытаться сделатьМетод удобен для него, но на самом деле мы должны думать о методах.

И в этом случае используется тот случай, когда метод действительно нуждается в аргументе таким образом;это означает, что вы фактически выполняете потоковую обработку внутри, например, ваш метод принимает бесконечный поток данных датчика, а метод внутри сходит с ума, как:

Flux<Point> processSensor(Flux<Double> data){ return data.filter(blabla).zipWith(blabla).map(...); }

0 голосов
/ 21 мая 2018

Только в случаях использования. Я могу понять, почему параметр метода равен Mono<String> lastname

  1. Был получен из функции типа WebClient / Router
  2. @ Secured ("ROLE_EVERYONE") использовался в предыдущем методе для извлечения lastname

Чтобы это работало, тип возвращаемого значения метода должен быть org.reactivestreams.Publisher (т.е. Mono/Flux).

...