And*_*sha 2 project-reactor reactive-streams spring-webflux spring-reactor
项目反应堆通量中的transform&之间有什么区别transformDeferred。
好的例子会有所帮助。
https://projectreactor.io/docs/core/release/reference/index.html#advanced-mutualizing-operator-usage
大多数时候, aFlux是“懒惰的”:您声明了一个处理管道,但数据只有在您订阅它后才开始流动。您可以多次订阅。
这称为冷 Flux(并且每次订阅冷源时,源都会为新订阅者的利益重新生成其数据)。
所以我们可以区分:
Flux实例上调用运算符的那一刻,返回一个新Flux实例transform是将一组运算符应用于给定Flux. 例如,您希望Flux服务的方法返回的所有内容都使用.log("serviceName"),因此您将这个特征具体化为static Function<Flux, Flux>:
loggingTrait = f -> f.log("serviceName");`
现在你可以通过transform.
它在组装时立即应用。由于订阅者随后而来,他们都“共享”了相同的函数结果。
现在想象一下你想要记录到例如。包括订阅时间,或其他更依赖于每个订阅者的数据。
这就是transformDeferred进来的地方:它将应用程序推迟Function到订阅发生的那一刻。另外,它适用Function于每个订阅。
所以你可以这样做:
loggingTrait = f -> f.log(serviceName + "@" + System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
每个订阅者的日志类别都不同。
| 归档时间: |
|
| 查看次数: |
1176 次 |
| 最近记录: |