我有一个阻塞数据存储,它返回列表。为了反应,我应该将这个列表转换为通量(或单声道,取决于返回值)然后处理吗?列表有另一个列表。我可以使用 Stream 处理临时值或使用 Flux.fromIterable 将其转换为 Flux 吗?我试图了解最佳实践以及反应式编程在哪些方面会产生最佳性能。
1 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
Mono
那么 a和 a有什么区别呢Flux
?
不同之处在于 aFlux
是 a List<Mono>
(为简单起见)。什么是Mono
?它是 T 类型的东西。那么这对你来说意味着什么。
好吧,如果你获取 aList<T>
你可以把它放在 a 中Mono<List<T>
,或者你可以把它放在 a 中Flux<T>
。
如果您使用Flux#fromIterable
列表中的每个项目放置此列表,那么列表中的每个项目都会变成一个Mono
,并且Flux
会在可用时发出该项目。
因为你有一个返回整个列表的阻塞调用,List<T>
如果你把它放在 a 中,Mono
订阅者将在一个大的发射中获得整个列表。如果它是一个非常大的列表,它可能会给 带来压力,subscriber
因为发布者可能会在一大块中发布一个巨大的列表,比如 1 000 000 个项目。
如果将大清单放入Flux
罐头subscriber
限制中,并要求服务以更受控制的方式发出物品,例如分 10 批次,每批 100,000 件物品。
所以我个人建议将列表放在Flux
.
但是这些都不会显着提高您的应用程序的性能。subscribers
它更多的是调用可以获得的功能。
为防止您的应用程序出现严重减速,重要的是您的阻塞调用是使用其自己的线程进行的。Schedulers.elastic()
这可以通过使用为长期任务生成新线程来实现。然后在默认 60 秒后终止该线程。
添加回答
举报
0/150
提交
取消