Mono<T> 和 Flux<T> 作为函数中的参数

Mono<T> and Flux<T> as a parameter in function

Mono<T>Flux<T> 作为函数参数的用例是什么。

代码

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

当我从 rest 调用上述方法时,与不使用 String.class 作为参数有什么区别?

只有用例我能想到为什么一个方法参数是Mono<String> lastname

  1. 从 WebClient/Router 类型的函数中检索到
  2. @Secured("ROLE_EVERYONE") 在之前的方法中用于检索 lastname

For this to work the return type of the method must be a org.reactivestreams.Publisher (i.e. Mono/Flux).

回答您的第一个评论问题:

@ErwinBolwidt i know use case for Mono/Flux in computation but i dont understand specifically using it as method parameter – Bibek Shakya

当你将它用作参数时,你必须将它作为一个流来处理(意味着你还没有它)所以例如你永远不应该说 lastname.block(),因为这意味着你在该值可用之前刚刚阻塞线程。


免责声明额外信息

如果您问是否应该从现在开始将任何东西包装在 Mono 或 flux 中,那么当然不是,因为它给方法和调用者增加了不必要的复杂性。

从设计的角度来看,答案很简单,只需问一些基本问题:

  • 一般什么时候使用单声道?
    • 好吧,当你还没有价值的时候。
  • 一般什么时候使用 Flux?
    • 好吧,当你有数据流来或不来时。

所以我们不要想着谁在用这个方法,尽量让方法方便他使用,而实际上我们应该想到方法的需要。

一个用例是当方法实际上需要这种方式的参数时;这意味着您实际上在内部进行流处理,例如您的方法接受无限的传感器数据流,并且内部方法变得疯狂,如:

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