在什么时候订阅会发生?(Spring WebFlux)

4

Spring Webflux在什么时候进行订阅?我已经读过的所有内容都说必须有订阅,否则不会发生任何变化。在我使用Spring Webflux很短的时间内,我从来没有在控制器或服务中看到subscribe()

我的疑问还在于使用flatMap()map()等方法时,订阅是在什么时候发生的?

我所读的内容并没有真正解决我的疑惑。

public Flux method(){
    ....
    myFlux.flatMap(data -> {
          ....

    }).flatMap(e -> { .... });
}

我知道这是一个异步问题,但每个flatMap都同时运行?...因此有时我注意到一些数据为空。
3个回答

6

谢谢,是的,我已经阅读了最后一个链接(并重新阅读了一遍)。对我来说很清楚,必须订阅,但在Spring WebFlux的情况下,它会在最后处理吗?根据我发布的示例,当它订阅时,它执行flatMap,完成后是否继续执行其他操作? - DarkVaderM
2
框架创建了一个订阅,然后该订阅通过整个链路传播直到达到源头。在此之后,源头会逐个通过操作符链向下传播 onNext、onComplete(或 onError)信号。 - Martin Tarjányi

0

在 flatmap 后,您需要调用 .subscribe()block() 函数。这里有一个例子。

假设 myFlux 是 Flux 类型的,则以下代码将执行订阅 myFlux.subscribe(System.out::println);

这是另一个 StackOverflow 帖子的解释。

但是,在您的 method 方法中,您正在返回一个 Flux 对象 - 因此,由 method() 方法的消费者决定如何订阅 Flux。不应尝试从内部订阅 Flux。


0

答案是:这取决于情况。

例如,如果这是一个Spring控制器方法,那么框架本身订阅MonoFlux

如果这是一个由调度程序定期触发的方法,则必须显式订阅MonoFlux,否则将不会进行任何处理。

这意味着,如果您的应用程序仅公开REST API,并且不需要以任何其他方式触发处理,则很可能永远不需要显式订阅MonoFlux,因为Spring将代替您处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接