首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebClient异步请求和处理Mono

WebClient异步请求和处理Mono
EN

Stack Overflow用户
提问于 2019-01-09 19:33:16
回答 1查看 2.5K关注 0票数 2

我是新的网络流量,并无法找到正确的材料,继续执行。

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

代码语言:javascript
运行
复制
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尝试了Scheuldes.parallel),但是在调用Mono.block()之前没有看到调用被执行。

我们如何实现?

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

回答 1

Stack Overflow用户

发布于 2019-01-10 11:08:52

您不需要阻止使用响应。只需指定一个操作符来使用同一链中的响应。下面给出一个例子。

代码语言:javascript
运行
复制
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()方法的参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54117103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档