Webflux的Spring Reactive编程-多种操作作为非阻塞流

时间:2019-11-10 18:45:09

标签: spring-boot reactive-programming spring-webflux flux

我有以下代码:

function not implemented

此方法:

ffmpeg

看起来像:

public Flux<Offer> getAllFilteredOffers(Map<String, String> searchParams) {

    Flux<ProductProperties> productProperties = productPropertiesService.findProductPropertiesBySearchCriteria(searchParams);
    Flux<Product> products = productService.findProductsByPropertyId(productProperties);
    Flux<Product> productsByAvailability = productService.getAllProductsByAvailability(products, searchParams);
    Flux<Offer> offers = offerRepository.findByPropertiesIds(productsByAvailability);
    return offers;

如何将productService.getAllProductsByAvailability(products, searchParams); 传递到public Flux<Product> getAllProductsByAvailability(Flux<Product> products, Map<String, String> searchParams) { 以保持非阻塞操作? 我已经读过地图被阻止,应该避免。 也许是这样吗?

List<Product>

我不是Webflux方面的专家,目前我正试图弄清楚如何处理以下问题:我有Flux,但在第二步中,我需要从以前的Flex <>对象中提取一些数据-保持非阻止流。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道您从何处了解map,但是如果您查看官方文档Webflux map operator,则与阻塞无关,它仅对每个项目使用同步功能。

使用此代码:

productPropertiesService.findProductPropertiesBySearchCriteria(searchParams)
                .flatMap(productProperties -> productService.findProductsByPropertyId(productProperties))
                .collectList()   (1)
                .flatMapMany(products -> productService.getAllProductsByAvailability(Flux.fromIterable(products), searchParams)) (2)

1)收集所有要列出的元素并转换为Mono>

2)从List创建FLux并将其作为参数提供,flatMapMany将Mono转换为Flux