成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文讀懂WebClient和RestTemplate的差異

開發(fā) 前端
自 Spring 5 以來,WebClient已成為Spring WebFlux的一部分,并且是發(fā)出 HTTP 請求的首選方式。它是經(jīng)典RestTemplate的首選替代方案,后者自 Spring 5.0 以來一直處于維護(hù)模式。

自 Spring 5 以來,WebClient已成為Spring WebFlux的一部分,并且是發(fā)出 HTTP 請求的首選方式。它是經(jīng)典RestTemplate的首選替代方案,后者自 Spring 5.0 以來一直處于維護(hù)模式。

本文將討論 Spring WebClient和RestTemplate類之間的主要區(qū)別。

1. WebClient和RestTemplate快速比較

特征

WebClient

RestTemplate

反應(yīng)式編程

基于反應(yīng)式原則構(gòu)建并支持反應(yīng)式編程。

同步而不是為反應(yīng)式編程而設(shè)計(jì)。

技術(shù)

構(gòu)建在反應(yīng)式技術(shù)棧上。

構(gòu)建在 Servlet 技術(shù)棧上。

線程模型

采用非阻塞I/O,適合處理大量并發(fā)請求。

使用阻塞 I/O,在高并發(fā)場景下可能會(huì)導(dǎo)致線程阻塞。

Java版本

需要 Java 8+ 或更高版本。支持函數(shù)式編程。

與 Java 6+ 或更高版本兼容。

錯(cuò)誤處理

使用onErrorResume、onErrorReturn等運(yùn)算符提供強(qiáng)大的錯(cuò)誤處理。

錯(cuò)誤處理通常使用 try-catch 塊完成。

流媒體

支持使用FluxMono流式傳輸數(shù)據(jù),適合反應(yīng)式流式場景。

對流的支持有限,不太適合反應(yīng)式流。

用例

最適合微服務(wù)、反應(yīng)式應(yīng)用以及需要高并發(fā)的場景。

適用于傳統(tǒng)的整體應(yīng)用程序和簡單的用例。

依賴關(guān)系

需要Spring WebFlux依賴項(xiàng)。

需要Spring Web依賴。

未來的支持

與反應(yīng)式編程模型保持一致,并可能會(huì)得到持續(xù)的開發(fā)和支持。

可能會(huì)維護(hù)更新,將來可能不會(huì)受到那么多關(guān)注。

2. 阻塞RestTemplate與非阻塞WebClient對比

2.1.RestTemplate

RestTemplate本質(zhì)上是阻塞的,并使用 Java Servlet API 的每個(gè)請求一個(gè)線程模型。這意味著RestTemplate一旦向遠(yuǎn)程服務(wù)器發(fā)送請求,就會(huì)等待響應(yīng)。默認(rèn)情況下,每次RestTemplate都會(huì)創(chuàng)建新的,并在收到并處理響應(yīng)后關(guān)閉連接。Httpconnection 創(chuàng)建和關(guān)閉 URL 連接是一項(xiàng)成本高昂的操作。為了在生產(chǎn)類應(yīng)用程序中有效地使用RestTemplate ,我們必須使用HTTP 連接池,否則性能會(huì)快速下降。當(dāng)應(yīng)用程序中有大量請求時(shí),線程和連接的數(shù)量也會(huì)按比例增加。這會(huì)給服務(wù)器資源帶來負(fù)擔(dān)。如果服務(wù)器速度緩慢,用戶很快就會(huì)發(fā)現(xiàn)應(yīng)用程序性能下降,甚至無響應(yīng)。

請注意,RestTemplate 是線程安全的,并且可以隨時(shí)在多個(gè)連接之間共享單個(gè)實(shí)例。

@Service
public 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本質(zhì)上是異步且非阻塞的。它遵循 Spring WebFlux 反應(yīng)式框架的事件驅(qū)動(dòng)架構(gòu)。使用WebClient,客戶端無需等待響應(yīng)返回。相反,當(dāng)服務(wù)器有響應(yīng)時(shí),它將使用回調(diào)方法收到通知。

當(dāng)我們通過WebClient調(diào)用返回 Mono或 Flux 的API 時(shí),API 會(huì)立即返回。而調(diào)用結(jié)果將通過 mono 或 flux 回調(diào)傳遞給調(diào)用端。

請注意,如果需要,我們可以通過WebClient.block()方法實(shí)現(xiàn)類似RestTemplate的同步處理。

@Service
public 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());
          }
      );
  }
}

三、結(jié)論

從上面可以清楚地看出, WebClient和RestTemplate之間唯一的大區(qū)別是它們的阻塞性質(zhì)。RestTemplate會(huì)阻止請求線程,而WebClient不會(huì)。我們可以使用WebClient來發(fā)出同步請求,但反之則不行。RestTemplate無法發(fā)出異步請求。

雖然WebClient是未來使用的首選方式,但 RestTemplate 應(yīng)該會(huì)長期保留,盡管沒有添加任何新的核心功能。

在考慮使用WebClient 構(gòu)建新應(yīng)用程序時(shí),我們必須記住,要構(gòu)建真正的非阻塞應(yīng)用程序,必須以非阻塞方式創(chuàng)建/使用其所有組件,即客戶端、控制器、中間服務(wù),甚至數(shù)據(jù)庫。如果其中之一阻塞了請求,目的就會(huì)落空。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2017-10-24 11:19:16

深度學(xué)習(xí)機(jī)器學(xué)習(xí)數(shù)據(jù)

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2018-09-28 14:06:25

前端緩存后端

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動(dòng)架構(gòu)數(shù)據(jù)

2024-04-10 13:50:41

CentOSUbuntu操作系統(tǒng)

2022-07-27 15:56:58

固態(tài)硬盤網(wǎng)絡(luò)存儲(chǔ)

2021-09-04 19:04:14

配置LogbackJava

2023-11-21 09:41:00

緩存策略存儲(chǔ)

2021-12-29 18:00:19

無損網(wǎng)絡(luò)網(wǎng)絡(luò)通信網(wǎng)絡(luò)

2022-10-20 08:01:23

2023-11-27 17:35:48

ComponentWeb外層

2022-07-26 00:00:03

語言模型人工智能

2022-12-01 17:23:45

2022-07-05 06:30:54

云網(wǎng)絡(luò)網(wǎng)絡(luò)云原生

2023-05-20 17:58:31

低代碼軟件

2020-12-30 09:05:24

架構(gòu)微內(nèi)核系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久精品色视频 | 免费一级毛片 | 久久久久久久一区 | 日韩成人免费视频 | 国产中文区二幕区2012 | 日韩毛片在线免费观看 | 国产一区二区三区精品久久久 | 久久久www成人免费精品 | 日韩视频精品 | 日韩一区二区三区在线观看 | 亚洲69p | 国产日韩欧美一区二区 | 在线观看欧美日韩视频 | 在线免费观看成人 | 九九热免费看 | 在线观看日本高清二区 | 九色porny自拍视频 | 青青久草| 亚洲在线一区二区 | 色一级| 一区二区成人 | 激情一区二区三区 | 韩日一区二区三区 | 亚洲激情第一页 | 99亚洲精品| 久久最新网址 | 中文字幕av网站 | 久久综合一区 | 国产一区二区观看 | 精品一区二区三区免费视频 | 国产欧美一区二区三区日本久久久 | www.久草 | 欧美一级黄色网 | 精品视频在线观看 | 99久久亚洲| 中文字幕在线视频免费观看 | 99久久亚洲 | 国产精品一区二区久久 | 欧美亚洲国语精品一区二区 | 日韩久久精品 | 日韩在线|