reactive-programming - Webflux WebClient异步请求和处理Mono

标签 reactive-programming spring-webflux project-reactor

我是 webflux 的新手,无法找到合适的 Material 来继续实现。

我想发出请求并异步处理响应。在这种情况下,服务调用大约需要 8-10 毫秒才能响应,因此我们发出请求并继续做其他工作,并在需要进一步处理时查找响应。

Mono<Map<String,Price>> resp = webClient.post()
.uri("/{type}",isCustomerPricing ? "customer" : "profile")
.body(Mono.just(priceDetailsRequest),PriceDetailsRequest.class)
.retrieve().bodyToMono(customerPriceDetailsType);

我们如何使这个调用在不同的线程上异步执行。(我尝试使用 Schedulers.single/Scheuldes.parallel 来订阅者On),但在调用 Mono.block() 之前没有看到调用被执行。

我们如何实现?

  1. 我们希望此调用在单独的线程上并行执行,因此 当前线程可以继续其他工作
  2. 处理完成后,将响应设置为上下文
  3. 当当前线程寻找响应时,如果服务还没有 完成,阻塞直到调用完成

最佳答案

您不需要阻止消费响应。只需分配一个运算符来消耗同一链中的响应即可。下面给出一个例子。

Mono<Map<String,Price>> resp = webClient.post()
        .uri("/{type}",isCustomerPricing ? "customer" : "profile")
        .body(Mono.just(priceDetailsRequest),PriceDetailsRequest.class)
        .retrieve()
        .bodyToMono(CustomerPriceDetailsType.class)
        .map(processor::responseToDatabaseEntity) // Create a persistable entity from the response
        .map(priceRepository::save)               // Save the entity to the database
        .subscribe();                             //This is to ensure that the flux is triggered.

或者,您可以提供消费者作为 subscribe() 方法的参数。

关于reactive-programming - Webflux WebClient异步请求和处理Mono,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117103/

相关文章:

javascript - 出错后继续订阅

python-3.x - 如何使用 rxpy/rxjs 延迟事件发射?

java - Webflux 和 keycloak 在 jwt 中使用方法安全级别@Preauthorize 自定义声明而不是默认范围

project-reactor - 为助焊剂消费者注册不同的线程

java - Reactor 3 发射极/用户并联

spring-webflux - 阻止 react 流中的调用

c# - 有没有办法听到 Reactive Extensions 中没有引发任何事件?

ios - 在 RxSwift 中点击按钮不会在平面 map 范围内调用 Moya 网络请求

spring - Kotlin 协程和 Spring Framework 5 react 类型

x509certificate - 谁有在Spring Cloud Gateway/Spring WebFlux中实现x509相互认证的简单例子?