为了账号安全,请及时绑定邮箱和手机立即绑定

从列表中创建通量是响应式编程的优化解决方案吗?

从列表中创建通量是响应式编程的优化解决方案吗?

浮云间 2023-06-04 10:28:42
我有一个阻塞数据存储,它返回列表。为了反应,我应该将这个列表转换为通量(或单声道,取决于返回值)然后处理吗?列表有另一个列表。我可以使用 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 秒后终止该线程。


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信