日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

一文讀懂WebClient和RestTemplate的差異

來源: 責(zé)編: 時(shí)間:2023-10-23 17:02:32 308觀看
導(dǎo)讀自 Spring 5 以來,WebClient已成為Spring WebFlux的一部分,并且是發(fā)出 HTTP 請(qǐng)求的首選方式。它是經(jīng)典RestTemplate的首選替代方案,后者自 Spring 5.0 以來一直處于維護(hù)模式。本文將討論 Spring WebClient和RestTemplate

自 Spring 5 以來,WebClient已成為Spring WebFlux的一部分,并且是發(fā)出 HTTP 請(qǐng)求的首選方式。它是經(jīng)典RestTemplate的首選替代方案,后者自 Spring 5.0 以來一直處于維護(hù)模式。id228資訊網(wǎng)——每日最新資訊28at.com

id228資訊網(wǎng)——每日最新資訊28at.com

本文將討論 Spring WebClient和RestTemplate類之間的主要區(qū)別。id228資訊網(wǎng)——每日最新資訊28at.com

1. WebClient和RestTemplate快速比較

特征id228資訊網(wǎng)——每日最新資訊28at.com

WebClientid228資訊網(wǎng)——每日最新資訊28at.com

RestTemplateid228資訊網(wǎng)——每日最新資訊28at.com

反應(yīng)式編程id228資訊網(wǎng)——每日最新資訊28at.com

基于反應(yīng)式原則構(gòu)建并支持反應(yīng)式編程。id228資訊網(wǎng)——每日最新資訊28at.com

同步而不是為反應(yīng)式編程而設(shè)計(jì)。id228資訊網(wǎng)——每日最新資訊28at.com

技術(shù)id228資訊網(wǎng)——每日最新資訊28at.com

構(gòu)建在反應(yīng)式技術(shù)棧上。id228資訊網(wǎng)——每日最新資訊28at.com

構(gòu)建在 Servlet 技術(shù)棧上。id228資訊網(wǎng)——每日最新資訊28at.com

線程模型id228資訊網(wǎng)——每日最新資訊28at.com

采用非阻塞I/O,適合處理大量并發(fā)請(qǐng)求。id228資訊網(wǎng)——每日最新資訊28at.com

使用阻塞 I/O,在高并發(fā)場景下可能會(huì)導(dǎo)致線程阻塞。id228資訊網(wǎng)——每日最新資訊28at.com

Java版本id228資訊網(wǎng)——每日最新資訊28at.com

需要 Java 8+ 或更高版本。支持函數(shù)式編程。id228資訊網(wǎng)——每日最新資訊28at.com

與 Java 6+ 或更高版本兼容。id228資訊網(wǎng)——每日最新資訊28at.com

錯(cuò)誤處理id228資訊網(wǎng)——每日最新資訊28at.com

使用onErrorResume、onErrorReturn等運(yùn)算符提供強(qiáng)大的錯(cuò)誤處理。id228資訊網(wǎng)——每日最新資訊28at.com

錯(cuò)誤處理通常使用 try-catch 塊完成。id228資訊網(wǎng)——每日最新資訊28at.com

流媒體id228資訊網(wǎng)——每日最新資訊28at.com

支持使用FluxMono流式傳輸數(shù)據(jù),適合反應(yīng)式流式場景。id228資訊網(wǎng)——每日最新資訊28at.com

對(duì)流的支持有限,不太適合反應(yīng)式流。id228資訊網(wǎng)——每日最新資訊28at.com

用例id228資訊網(wǎng)——每日最新資訊28at.com

最適合微服務(wù)、反應(yīng)式應(yīng)用以及需要高并發(fā)的場景。id228資訊網(wǎng)——每日最新資訊28at.com

適用于傳統(tǒng)的整體應(yīng)用程序和簡單的用例。id228資訊網(wǎng)——每日最新資訊28at.com

依賴關(guān)系id228資訊網(wǎng)——每日最新資訊28at.com

需要Spring WebFlux依賴項(xiàng)。id228資訊網(wǎng)——每日最新資訊28at.com

需要Spring Web依賴。id228資訊網(wǎng)——每日最新資訊28at.com

未來的支持id228資訊網(wǎng)——每日最新資訊28at.com

與反應(yīng)式編程模型保持一致,并可能會(huì)得到持續(xù)的開發(fā)和支持。id228資訊網(wǎng)——每日最新資訊28at.com

可能會(huì)維護(hù)更新,將來可能不會(huì)受到那么多關(guān)注。id228資訊網(wǎng)——每日最新資訊28at.com

2. 阻塞RestTemplate與非阻塞WebClient對(duì)比

2.1.RestTemplate

RestTemplate本質(zhì)上是阻塞的,并使用 Java Servlet API 的每個(gè)請(qǐng)求一個(gè)線程模型。這意味著RestTemplate一旦向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求,就會(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)用程序中有大量請(qǐng)求時(shí),線程和連接的數(shù)量也會(huì)按比例增加。這會(huì)給服務(wù)器資源帶來負(fù)擔(dān)。如果服務(wù)器速度緩慢,用戶很快就會(huì)發(fā)現(xiàn)應(yīng)用程序性能下降,甚至無響應(yīng)。id228資訊網(wǎng)——每日最新資訊28at.com

請(qǐng)注意,RestTemplate 是線程安全的,并且可以隨時(shí)在多個(gè)連接之間共享單個(gè)實(shí)例。id228資訊網(wǎng)——每日最新資訊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本質(zhì)上是異步且非阻塞的。它遵循 Spring WebFlux 反應(yīng)式框架的事件驅(qū)動(dòng)架構(gòu)。使用WebClient,客戶端無需等待響應(yīng)返回。相反,當(dāng)服務(wù)器有響應(yīng)時(shí),它將使用回調(diào)方法收到通知。id228資訊網(wǎng)——每日最新資訊28at.com

當(dāng)我們通過WebClient調(diào)用返回 Mono或 Flux 的API 時(shí),API 會(huì)立即返回。而調(diào)用結(jié)果將通過 mono 或 flux 回調(diào)傳遞給調(diào)用端。id228資訊網(wǎng)——每日最新資訊28at.com

請(qǐng)注意,如果需要,我們可以通過WebClient.block()方法實(shí)現(xiàn)類似RestTemplate的同步處理。id228資訊網(wǎng)——每日最新資訊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());          }      );  }}

三、結(jié)論

從上面可以清楚地看出, WebClient和RestTemplate之間唯一的大區(qū)別是它們的阻塞性質(zhì)。RestTemplate會(huì)阻止請(qǐng)求線程,而WebClient不會(huì)。我們可以使用WebClient來發(fā)出同步請(qǐng)求,但反之則不行。RestTemplate無法發(fā)出異步請(qǐng)求。id228資訊網(wǎng)——每日最新資訊28at.com

雖然WebClient是未來使用的首選方式,但 RestTemplate 應(yīng)該會(huì)長期保留,盡管沒有添加任何新的核心功能。id228資訊網(wǎng)——每日最新資訊28at.com

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

本文鏈接:http://www.www897cc.com/showinfo-26-14531-0.html一文讀懂WebClient和RestTemplate的差異

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 國際權(quán)威大獎(jiǎng)GCAs揭曉 秦淮數(shù)據(jù)包攬數(shù)據(jù)中心類兩項(xiàng)大獎(jiǎng)

下一篇: 甲骨文為 Visual Studio Code 推出 Java 擴(kuò)展插件,號(hào)稱涵蓋全開發(fā)周期

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 会同县| 云梦县| 英德市| 荥经县| 高雄县| 三原县| 宁强县| 永德县| 溆浦县| 平乡县| 永兴县| 卢龙县| 恩施市| 洛扎县| 锡林郭勒盟| 陵川县| 桐庐县| 巫山县| 黔西县| 沁源县| 留坝县| 海兴县| 万全县| 界首市| 奉贤区| 天台县| 肇源县| 东港市| 常州市| 通化市| 彩票| 景宁| 枣阳市| 公主岭市| 安泽县| 富顺县| 泊头市| 聊城市| 柏乡县| 汝州市| 确山县|