reactive-programming - Spring Webflux - 如何在不使用 block() 操作的情况下从 Flux 中获取价值
问题描述
我想知道如何使用 Webflux 编写非阻塞代码。
这是我想做的事情:
- 按字段获取所有产品
ProductProperties
(以 Flux 形式返回) - 从
Flux<Product>.availabilityCalendar
使用第 2 步中检索到的数据获取值列表并获取一些其他数据(以 Flux<> 形式返回) - 一切都应该是非阻塞操作。
怎么做?如何从中获取值Flux<Object>
,然后获取作为 Flux<> 返回的其他一些数据,从而避免像 Flux.block() 这样的阻塞操作来检索下一步获取最终数据以返回所需的数据?
public Flux<Product> getAllProductsByAvailability(Flux<ProductProperties> productProperties,
Map<String, String> searchParams) {
productProperties
.flatMap(property -> productRepository.findByProductPropertiesId(property.getId())) //1. return Products
.flatMap(product -> Flux.just(product.getAvailabilityCalendar())) //2. how to get Product.availabilityCalendar list as non-blocking operation to work with this data afterwards?
(...)
在哪里:
productRepository.findByProductPropertiesId
返回通量产品有领域:
ArrayList<ProductAvailability> availabilityCalendar
这是一个好方法吗?
谢谢!
解决方案
通过使用 onNext 参数
productRepository.findByProductPropertiesId(property.getId())
.onNext(product -> {
return // Do things here
})
推荐阅读
- docker - 跨主机和 docker 容器的权限
- sql - 查看未运行 - percentile_cont
- python - 发生这种情况是因为存在 NaN 吗?
- c# - 如何在 Repository .Net Web API 中使用多个 DataContexts(DbContext)
- java - 如何检查Java接口是否有实现?
- node.js - 获取不是由我的帐户托管的广播的实时聊天
- python - CSV 输入上的 Heatmap.py IndexError
- ruby-on-rails - 为什么圆形 CI 无法找到 rails 凭据但规范测试在本地工作?
- python - SQLite BUSY 提交回调
- azure-active-directory - 洞察/共享返回 403 而洞察/使用返回成功响应