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

时间:2018-05-20 05:30:51

标签: java project-reactor

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

代码

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

当我从休息中调用上述方法时,不使用String.class作为参数会有什么不同?

2 个答案:

答案 0 :(得分:2)

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

  

@ErwinBolwidt我知道在计算中使用Mono / Flux的用例,但我不明白使用它作为方法参数– Bibek Shakya

当使用它作为参数时,必须将其作为流处理(意味着您还没有),例如,您永远不要说lastname.block(),因为这意味着您刚刚被阻止了直到该值可用为止的线程。


免责声明其他信息

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

从设计角度来看,回答基本问题的方法很简单:

  • 一般何时使用Mono?
    • 好吧,当您仍然没有价值时。
  • 一般何时使用Flux?
    • 好吧,无论您是否有数据流进来。

因此,我们不应该考虑谁在使用该方法并尝试使该方法对他方便,但实际上,我们应该考虑该方法的需求。

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

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

答案 1 :(得分:0)

只有用例我能想到方法参数为Mono<String> lastname

的原因
  1. 从WebClient /路由器类型函数检索
  2. @Secured("ROLE_EVERYONE")在之前的方法中用于检索lastname
  3.   

    为此,方法的返回类型必须是a   org.reactivestreams.Publisher(即Mono / Flux)。