当前位置: 首页 > news >正文

网络请求客户端WebClient的使用

在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。根据 Spring 官方文档介绍,在将来的版本中它可能会被弃用。

​ 作为替代,Spring 官方已在 Spring 5 中引入了 WebClient 作为非阻塞式 Reactive HTTP 客户端。

一 基本介绍

1 什么是WebClient

  • 从 Spring 5 开始,Spring 中全面引入了 Reactive 响应式编程。而 WebClient 则是 Spring WebFlux 模块提供的一个非阻塞的基于响应式编程的进行 Http 请求的客户端工具。
  • 由于 WebClient 的请求模式属于异步非阻塞,能够以少量固定的线程处理高并发的 HTTP 请求。因此,从 Spring 5 开始,HTTP 服务之间的通信我们就可以考虑使用 WebClient 来取代之前的 RestTemplate。

2 WebClient 的优势

(1)与 RestTemplate 相比,WebClient 有如下优势:

  • 非阻塞,Reactive 的,并支持更高的并发性和更少的硬件资源。
  • 提供利用 Java 8 lambdas 的函数 API。
  • 支持同步和异步方案。
  • 支持从服务器向上或向下流式传输。

(2)RestTemplate 不适合在非阻塞应用程序中使用,因此 Spring WebFlux 应用程序应始终使用 WebClient。在大多数高并发场景中,WebClient 也应该是 Spring MVC 中的首选,并且用于编写一系列远程,相互依赖的调用。

3 使用配置

在pom文件里,导入一下配置即可

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

二 创建WebClient实例

1 使用 create() 创建

WebClient.create(): 这是 WebClient 的静态工厂方法之一。调用 WebClient.create() 将直接创建一个默认配置的 WebClient 实例。这个实例可以立即使用,而无需进行进一步的配置。它使用默认的 WebFlux 配置和默认的 WebClientOptions。

WebClient webClient = WebClient.create();
public Order queryOrderById(Long orderId) {
    // 1. 查询订单
    Order order = orderMapper.findById(orderId);
    // 2. 构造远程调用的 URL
    String url = "http://localhost:8081/user/" + order.getUserId();
    // 3. 发起远程调用,使用 WebClient 替代 RestTemplate
    User user = webClient.get()
            .uri(url)
            .retrieve()
            .bodyToMono(User.class)
            .block(); // 使用 block() 方法等待结果返回,或者使用 reactive 链式编程来处理响应
    // 4. 封装 user 到 order
    order.setUser(user);
    // 5. 返回 order
    return order;
}

2 使用builder 创建(推荐)

WebClient.builder(): 这是 WebClient 的另一个静态工厂方法。调用 WebClient.builder() 将返回一个 WebClient.Builder 对象,您可以在该对象上进行更多的配置。使用 WebClient.Builder,您可以设置各种选项,如超时时间、连接池大小、拦截器、错误处理等。

WebClient webClient = WebClient.builder()
    .baseUrl("https://api.example.com")
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    .build();

三 总结

create() 方法提供了一种简单快速创建默认配置 WebClient 实例的方式,而 builder() 方法则提供了更灵活的配置选项

相关文章:

  • 【Linux】Socket中的心跳机制(心跳包)
  • C语言数据结构堆排序、向上调整和向下调整的时间复杂度的计算、TopK问题等的介绍
  • redis数据类型之Hash,Bitmaps
  • P3128 [USACO15DEC] Max Flow P题解(树上差分,最近公共祖先,图论)
  • HDR视频相关标准-HDR vivid(二)
  • WordPress外贸网站建设的成功要素与技术点
  • 摩尔线程MTT S4000 AI GPU助力30亿参数大模型训练,性能比肩英伟达同类解决方案
  • Go语言GoFly框架快速新增接口/上手写代码
  • 23种设计模式之一— — — —装饰模式详细介绍与讲解
  • Java final关键字
  • AI在肿瘤学临床决策中的应用:一种多模态方法
  • Web3 知识体系架构图
  • Unix环境高级编程--8-进程控制---8.1-8.2进程标识-8.3fork函数-8.4 vfork函数
  • 【Linux】使用AddressSanitizer分析内存非法使用问题
  • docker不删除容器更改其挂载目录
  • Django学习
  • JavaScript-JavaWeb
  • 用Python实现办公自动化
  • 《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相
  • 数据结构——二叉树的实现
  • 三大交易所修订股票上市规则:明确关键少数责任,强化中小股东保障
  • 湖南省郴州市统战部部长黄峥嵘主动交代问题,接受审查调查
  • 5月1日起,涉外婚姻登记将在上海市16区全面铺开
  • 生于1982年,孙晋出任共青团广西壮族自治区委员会书记
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • “沉默”的智驾:余承东不喊“遥遥领先”,何小鹏连夜改口 | 电厂