transform和transformDeferred在工程反应器流量中的区别是什么?
好的例子会有帮助的。
https://projectreactor.io/docs/core/release/reference/index.html#advanced-mutualizing-operator-usage
发布于 2020-09-10 10:34:48
大多数情况下,Flux是“懒惰”的:您声明了一个处理管道,但是数据只有在订阅之后才会开始流动。你可以多次订阅。
这称为冷Flux (每次订阅冷源时,源都会为新订阅者重新生成数据)。
这样我们就能区分:
Flux实例上调用操作符的时刻,返回一个新的Flux instancetransform是一种将一组运算符应用于给定Flux的方便方法。例如,您希望服务的方法返回的所有Flux都使用.log("serviceName"),因此在static Function<Flux, Flux>中将此特性具体化。
loggingTrait =f -> f.log(“serviceName”);
现在,您可以通过transform将此特性应用于服务的所有流控返回方法中。
它是立即应用,就在集会时间。由于订阅者之后,他们都“共享”相同的结果的功能。
现在想象一下你想要伐木。包括订阅时间,或其他更依赖于每个订阅者的数据。
这就是transformDeferred进来的地方:它把Function的应用程序推迟到订阅发生的那一刻。此外,它还为每个订阅应用了Function。
所以你可以做这样的事:
loggingTrait = f -> f.log(serviceName + "@" + System.currentTimeMillis());对于每个订阅者,日志类别将是不同的。
https://stackoverflow.com/questions/63711972
复制相似问题