项目反应堆通量之间的区别是什么transform
。transformDeferred
好的例子会有所帮助。
https://projectreactor.io/docs/core/release/reference/index.html#advanced-mutualizing-operator-usage
项目反应堆通量之间的区别是什么transform
。transformDeferred
好的例子会有所帮助。
https://projectreactor.io/docs/core/release/reference/index.html#advanced-mutualizing-operator-usage
大多数时候, aFlux
是“惰性的”:您声明了一个处理管道,但数据只有在您订阅它后才开始流动。您可以订阅多次。
这称为冷 Flux
(每次订阅冷源时,源都会重新生成其数据以使新订阅者受益)。
所以我们可以区分:
Flux
返回一个新Flux
实例的时刻transform
是一种将一组运算符应用于给定的便捷方法Flux
。例如,您希望Flux
通过服务的方法返回的所有内容都使用.log("serviceName")
,因此您将这个特征外部化在 a 中static Function<Flux, Flux>
:
loggingTrait = f -> f.log("serviceName");`
现在,您可以在服务的所有返回通量的方法中应用此特征transform
。
它会在组装时立即应用。由于订阅者紧随其后,他们都“共享”该函数的相同结果。
现在想象一下,您希望将日志记录到例如。包括订阅时间,或者更依赖于每个单独订阅者的另一条数据。
这就是transformDeferred
进来的地方:它将应用程序推迟Function
到订阅发生的那一刻。另外,它适用Function
于每个订阅。
因此,您可以执行以下操作:
loggingTrait = f -> f.log(serviceName + "@" + System.currentTimeMillis());
每个订阅者的日志类别会有所不同。