当前位置:首页 > 科技  > 软件

一文读懂WebClient和RestTemplate的差异

来源: 责编: 时间:2023-10-23 17:02:32 178观看
导读自 Spring 5 以来,WebClient已成为Spring WebFlux的一部分,并且是发出 HTTP 请求的首选方式。它是经典RestTemplate的首选替代方案,后者自 Spring 5.0 以来一直处于维护模式。本文将讨论 Spring WebClient和RestTemplate

自 Spring 5 以来,WebClient已成为Spring WebFlux的一部分,并且是发出 HTTP 请求的首选方式。它是经典RestTemplate的首选替代方案,后者自 Spring 5.0 以来一直处于维护模式。wlo28资讯网——每日最新资讯28at.com

wlo28资讯网——每日最新资讯28at.com

本文将讨论 Spring WebClient和RestTemplate类之间的主要区别。wlo28资讯网——每日最新资讯28at.com

1. WebClient和RestTemplate快速比较

特征wlo28资讯网——每日最新资讯28at.com

WebClientwlo28资讯网——每日最新资讯28at.com

RestTemplatewlo28资讯网——每日最新资讯28at.com

反应式编程wlo28资讯网——每日最新资讯28at.com

基于反应式原则构建并支持反应式编程。wlo28资讯网——每日最新资讯28at.com

同步而不是为反应式编程而设计。wlo28资讯网——每日最新资讯28at.com

技术wlo28资讯网——每日最新资讯28at.com

构建在反应式技术栈上。wlo28资讯网——每日最新资讯28at.com

构建在 Servlet 技术栈上。wlo28资讯网——每日最新资讯28at.com

线程模型wlo28资讯网——每日最新资讯28at.com

采用非阻塞I/O,适合处理大量并发请求。wlo28资讯网——每日最新资讯28at.com

使用阻塞 I/O,在高并发场景下可能会导致线程阻塞。wlo28资讯网——每日最新资讯28at.com

Java版本wlo28资讯网——每日最新资讯28at.com

需要 Java 8+ 或更高版本。支持函数式编程。wlo28资讯网——每日最新资讯28at.com

与 Java 6+ 或更高版本兼容。wlo28资讯网——每日最新资讯28at.com

错误处理wlo28资讯网——每日最新资讯28at.com

使用onErrorResume、onErrorReturn等运算符提供强大的错误处理。wlo28资讯网——每日最新资讯28at.com

错误处理通常使用 try-catch 块完成。wlo28资讯网——每日最新资讯28at.com

流媒体wlo28资讯网——每日最新资讯28at.com

支持使用FluxMono流式传输数据,适合反应式流式场景。wlo28资讯网——每日最新资讯28at.com

对流的支持有限,不太适合反应式流。wlo28资讯网——每日最新资讯28at.com

用例wlo28资讯网——每日最新资讯28at.com

最适合微服务、反应式应用以及需要高并发的场景。wlo28资讯网——每日最新资讯28at.com

适用于传统的整体应用程序和简单的用例。wlo28资讯网——每日最新资讯28at.com

依赖关系wlo28资讯网——每日最新资讯28at.com

需要Spring WebFlux依赖项。wlo28资讯网——每日最新资讯28at.com

需要Spring Web依赖。wlo28资讯网——每日最新资讯28at.com

未来的支持wlo28资讯网——每日最新资讯28at.com

与反应式编程模型保持一致,并可能会得到持续的开发和支持。wlo28资讯网——每日最新资讯28at.com

可能会维护更新,将来可能不会受到那么多关注。wlo28资讯网——每日最新资讯28at.com

2. 阻塞RestTemplate与非阻塞WebClient对比

2.1.RestTemplate

RestTemplate本质上是阻塞的,并使用 Java Servlet API 的每个请求一个线程模型。这意味着RestTemplate一旦向远程服务器发送请求,就会等待响应。默认情况下,每次RestTemplate都会创建新的,并在收到并处理响应后关闭连接。Httpconnection 创建和关闭 URL 连接是一项成本高昂的操作。为了在生产类应用程序中有效地使用RestTemplate ,我们必须使用HTTP 连接池,否则性能会快速下降。当应用程序中有大量请求时,线程和连接的数量也会按比例增加。这会给服务器资源带来负担。如果服务器速度缓慢,用户很快就会发现应用程序性能下降,甚至无响应。wlo28资讯网——每日最新资讯28at.com

请注意,RestTemplate 是线程安全的,并且可以随时在多个连接之间共享单个实例。wlo28资讯网——每日最新资讯28at.com

@Servicepublic class MyService {  private final RestTemplate restTemplate;  @Autowired  public MyService(RestTemplate restTemplate) {    this.restTemplate = restTemplate;  }  public String getData() {    ResponseEntity<String> responseEntity      = restTemplate.getForEntity("https://api.example.com/data", String.class);    String responseBody = responseEntity.getBody();    return responseBody;  }}

2.2.WebClient

与RestTemplate相反,WebClient本质上是异步且非阻塞的。它遵循 Spring WebFlux 反应式框架的事件驱动架构。使用WebClient,客户端无需等待响应返回。相反,当服务器有响应时,它将使用回调方法收到通知。wlo28资讯网——每日最新资讯28at.com

当我们通过WebClient调用返回 Mono或 Flux 的API 时,API 会立即返回。而调用结果将通过 mono 或 flux 回调传递给调用端。wlo28资讯网——每日最新资讯28at.com

请注意,如果需要,我们可以通过WebClient.block()方法实现类似RestTemplate的同步处理。wlo28资讯网——每日最新资讯28at.com

@Servicepublic class MyService {  private final WebClient webClient;  @Autowired  public MyService(WebClient webClient) {    this.webClient = webClient;  }  public Mono<String> getData() {    return webClient.get()      .uri("/data")      .retrieve()      .bodyToMono(String.class)      .subscribe(          // onSuccess callback          result -> {            System.out.println("Success: " + result);          },          // onError callback          error -> {            System.err.println("Error: " + error.getMessage());          }      );  }}

三、结论

从上面可以清楚地看出, WebClient和RestTemplate之间唯一的大区别是它们的阻塞性质。RestTemplate会阻止请求线程,而WebClient不会。我们可以使用WebClient来发出同步请求,但反之则不行。RestTemplate无法发出异步请求。wlo28资讯网——每日最新资讯28at.com

虽然WebClient是未来使用的首选方式,但 RestTemplate 应该会长期保留,尽管没有添加任何新的核心功能。wlo28资讯网——每日最新资讯28at.com

在考虑使用WebClient 构建新应用程序时,我们必须记住,要构建真正的非阻塞应用程序,必须以非阻塞方式创建/使用其所有组件,即客户端、控制器、中间服务,甚至数据库。如果其中之一阻塞了请求,目的就会落空。wlo28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14555-0.html一文读懂WebClient和RestTemplate的差异

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 你的 JavaScript 正在泄漏内存而你却不知道

下一篇: 甲骨文为 Visual Studio Code 推出 Java 扩展插件,号称涵盖全开发周期

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 影音体验是真的强 简单聊聊iQOO Pad

    影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • K6:面向开发人员的现代负载测试工具

    K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • Golang 中的 io 包详解:组合接口

    Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 这款新兴工具平台,让你的电脑效率翻倍

    这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 四年持续更迭坚持探索行业无人之境,HarmonyOS 4带来五大升级多项创新

    四年持续更迭坚持探索行业无人之境,HarmonyOS 4带来五大升级多项创新

    除了华为每年新发布的旗舰手机系列,上亿花粉更加期待鸿蒙系统每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式发布,这也是该系统历经四年的再
  • 微软发布Windows 11新版 引入全新任务栏状态

    微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top