【问题标题】:Connection pooling in spring WebClientSpring WebClient 中的连接池
【发布时间】:2020-08-06 01:09:44
【问题描述】:

我想在项目中使用 Spring WebClient 来使用一些外部 Web 服务。

  1. WebClient 对象可以是单例的还是在所有线程(请求)之间共享?
  2. 如果我的应用程序每秒要获得数百万个请求,那么我是否需要汇集 WebClient 对象?如果是,我找不到任何文档或示例。
  3. mono.block() 在内部的工作方式是否类似于 future.get()latch.await()

【问题讨论】:

  • 一开始不关注过多优化的常见做法。首先编写您的应用程序,然后对其进行负载测试,然后分析和优化需要优化的内容

标签: spring spring-boot spring-webflux project-reactor spring-webclient


【解决方案1】:

WebClient 是基于 Reactive Stack 构建的 REST 客户端的非阻塞实现,所以我想您应该关注的唯一问题是完成非阻塞调用。

  1. WebClient 对象可以是单例还是在所有线程(请求)之间共享?

我在各处看到的标准方法是将WebClient 作为 bean 注入。我没有理由做任何不同的事情。

@Autowired
WebClient webClient;
  1. 如果我的应用程序每秒要获得数百万个请求,那么我是否需要池化 WebClient 对象?

太多了!这肯定需要通过服务复制、负载平衡器、隔板等来解决。就客户端本身而言,请参见使用较新版本的 Spring 的响应式客户端的以下性能:WebFlux Reactive Programming Performance Test。此外,这是预期的最大吞吐量吗?

  1. mono.block() 的内部工作方式是否类似于 future.get() 或 latch.await()?

是的,确实如此。

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 2019-05-16
    • 2019-09-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多