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

Is creating flux from a list an optimized solution for reactive programming?

我有一个阻塞数据存储,return是列表。 为了反应,我是否应该将此列表转换为通量(或单声道,取决于 return 值)然后处理?

列表有另一个列表。我可以使用 Stream 处理临时值或使用 Flux.fromIterable 将其转换为 Flux 吗?

我正在尝试了解最佳实践以及响应式编程在哪些方面会产生最佳性能。

那么MonoFlux有什么区别呢?

区别在于 FluxList<Mono>(为简单起见)。什么是 Mono?它是 T 类型的东西。那么这对你的情况意味着什么。

好吧,如果你获取一个 List<T>,你可以把它放在 Mono<List<T> 中,或者你可以把它放在 Flux<T>.

如果您使用 Flux#fromIterable 放置此列表,列表中的每个项目都会变成 Mono 并且 Flux 将在可用时发出该项目。

因为你有一个 returns 整个 List<T> 的阻塞调用,如果你把它放在 Mono 中,订阅者将在一次大发射中获得整个列表。如果它是一个非常大的列表,它可能会给 subscriber 带来压力,因为发布者可能会在一大块中发布一个巨大的列表,比如 1 000 000 个项目。

如果一个大列表放在 Flux 中,subscriber 可以限制并要求服务以更可控的方式发出项目,例如 10 批,每批 100 000 个项目。

所以我个人建议将列表放在 Flux.

但是 none 这对您的应用程序有任何显着的性能提升。这是调用 subscribers 可以获得的更多功能。

为防止您的应用程序出现严重减速,请务必使用其自己的线程进行阻塞调用。这可以使用 Schedulers.elastic() 来实现,它会为长期任务生成一个新线程。然后在默认 60 秒后终止该线程。