首页 > 解决方案 > Spring Webflux - 如何在不使用 block() 操作的情况下从 Flux 中获取价值

问题描述

我想知道如何使用 Webflux 编写非阻塞代码。

这是我想做的事情:

  1. 按字段获取所有产品ProductProperties(以 Flux 形式返回)
  2. 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?
(...)

在哪里:

  1. productRepository.findByProductPropertiesId返回通量

  2. 产品有领域:ArrayList<ProductAvailability> availabilityCalendar

这是一个好方法吗?

谢谢!

标签: reactive-programmingspring-webflux

解决方案


通过使用 onNext 参数

productRepository.findByProductPropertiesId(property.getId())
.onNext(product -> {
    return // Do things here
})

推荐阅读