SpringCloud跨微服務的遠程調用,如何發起網絡請求,RestTemplate

在我們的業務流程之中不一定都會是自己模塊查詢自己模塊的信息,有些時候就需要去結合其他模塊的信息來進行一些查詢完成相應的業務流程,但是在SpringCloud每個模塊都相對獨立,數據庫也有數據隔離。所以當我們需要其他微服務模塊的信息的時候,就需要跨模塊調用發起網絡請求。

就像電商項目中,購物車模塊就不得不需要像商品模塊發起查詢請求。購物車業務中需要查詢商品信息,但商品信息查詢的邏輯全部遷移到了item-service服務,導致我們無法查詢。

最終結果就是查詢到的購物車數據不完整,因此要想解決這個問題,我們就必須改造其中的代碼,把原本本地方法調用,改造成跨微服務的遠程調用(RPC,即Remote Produce Call)。

因此,現在查詢購物車列表的流程變成了這樣:

那么:我們該如何用Java代碼發送Http的請求呢?

RestTemplate

Spring給我們提供了一個RestTemplate的API,可以方便的實現Http請求的發送。

rg.springframework.web.client public class RestTemplate

extends InterceptingHttpAccessor

implements RestOperations

----------------------------------------------------------------------------------------------------------------

同步客戶端執行HTTP請求,在底層HTTP客戶端庫(如JDK HttpURLConnection、Apache HttpComponents等)上公開一個簡單的模板方法API。RestTemplate通過HTTP方法為常見場景提供了模板,此外還提供了支持不太常見情況的通用交換和執行方法。 RestTemplate通常用作共享組件。然而,它的配置不支持并發修改,因此它的配置通常是在啟動時準備的。如果需要,您可以在啟動時創建多個不同配置的RestTemplate實例。如果這些實例需要共享HTTP客戶端資源,它們可以使用相同的底層ClientHttpRequestFactory。 注意:從5.0開始,這個類處于維護模式,只有對更改和錯誤的小請求才會被接受。請考慮使用org.springframework.web.react .client. webclient,它有更現代的API,支持同步、異步和流場景。

其中提供了大量的方法,方便我們發送Http請求,例如:

可以看到常見的Get、Post、Put、Delete請求都支持,如果請求參數比較復雜,還可以使用exchange方法來構造請求。

我們在需要的微服務中定義一個配置類:

在啟動類中先將RestTemplate注冊為一個Bean:

@SpringBootApplication
public class CartApplication {public static void main(String[] args) {SpringApplication.run(CartApplication.class, args);}@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

遠程調用

接下來,我們修改cart-service中的實現類的handleCartItems方法,發送http請求到item-service

// 2.查詢商品
//        List<ItemDTO> items = itemService.queryItemByIds(itemIds);//1.利用RestTemplate發起Http的請求,得到Http的響應ResponseEntity<List<ItemDTO>> response = restTemplate.exchange("http://localhost:8081/items?ids={ids}",//請求路徑HttpMethod.GET,//請求方式null,//請求實體new ParameterizedTypeReference<List<ItemDTO>>() {},//返回值類型Map.of("ids", CollUtil.join(itemIds, ",")));//2.解析響應if (!response.getStatusCode().is2xxSuccessful()){//查詢失敗,結束return;}List<ItemDTO> items = response.getBody();if (CollUtils.isEmpty(items)) {return;}

可以看到,利用RestTemplate發送http請求與前端ajax發送請求非常相似,都包含四部分信息:

  • ① 請求方式

  • ② 請求路徑

  • ③ 請求參數

  • ④ 返回值類型

@RequiredArgsConstructor
public class CartServiceImpl extends ServiceImpl<CartMapper, Cart> implements ICartService {private final RestTemplate restTemplate;

使用@RequiredArgsConstructor注解可以把final修飾的變量視為常量產生構造方法,比@AllArgsConstructor更適合

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43384.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43384.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43384.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是SpringCloud Stream?

Spring Cloud Stream 是一個構建消息驅動微服務的框架&#xff0c;其基于Spring Boot來開發&#xff0c;并使用Spring Integration來連接消息代理中間件。該項目的目標是提供一套用于開發消息驅動應用的通用模型&#xff0c;并定義了用于發送和接收消息的綁定器&#xff08;Bin…

前端javascript中的排序算法之選擇排序

選擇排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 是一種原址排序法&#xff1b; 將數組分為兩個區間&#xff1a;左側為已排序區間&#xff0c;右側為未排序區間。每趟從未排序區間中選擇一個值最小的元素&#xff0c;放到已排序區間的末尾&#xff0c;從…

玩轉springboot之為什么springboot可以直接執行

為什么springboot可以直接執行 先看一下springboot打包生成的MANIFEST.MF內容是什么 Manifest-Version: 1.0Implementation-Title: exam-adminImplementation-Version: 1.0-SNAPSHOTStart-Class: com.zhanghe.exam.ApplicationSpring-Boot-Classes: BOOT-INF/classes/Spring-Bo…

小米采取措施禁止國行版設備安裝國際版系統 刷機后將報錯無法進入系統

據知名官改版系統 Xiaomi.EU 測試者 Kacper Skrzypek 發布的消息&#xff0c;小米目前已經在開機引導中新增區域檢測機制&#xff0c;該機制將識別硬件所屬的市場版本&#xff0c;例如中國大陸市場銷售的小米即將在安裝國際版系統后將無法正常啟動。 測試顯示該檢測機制是在開…

1.DDR3 SO-DIMM 內存條硬件總結

最近在使用fpga讀寫DDR3&#xff0c;板子上的DDR3有兩種形式與fpga相連&#xff0c;一種是直接用ddr3內存顆粒&#xff0c;另一種是通過內存條的形式與fpga相連。這里我們正好記錄下和ddr3相關的知識&#xff0c;先從DDR3 SO-DIMM 內存條開始。 1.先看內存條的版本 從JEDEC下載…

四步帶你實現【Open3d】--邊緣檢測

Open3D邊緣檢測技術從3D數據中精準識別并提取邊界&#xff0c;對于場景解析、物體輪廓提取等任務至關重要。Open3D提供多種算法&#xff0c;幫助用戶高效實現邊緣檢測&#xff0c;促進3D數據的深度分析和應用。 一、安裝 pip install open3d # 即可 二、使用 首先&#…

《算法筆記》總結No.5——遞歸

一.分而治之 將原問題劃分為若干個規模較小而結構與原問題相同或相似的子問題&#xff0c;然后分別解決這些子問題&#xff0c;最后合并子問題的解&#xff0c;即可得到原問題的解&#xff0c;步驟抽象如下&#xff1a; 分解&#xff1a;將原問題分解為若干子問題解決&#x…

用VLM訓練實時計算機視覺模型

經過數十億個參數訓練的 AI 模型非常強大&#xff0c;但并不總是適合實時使用。但是&#xff0c;它們可以通過自動監督快速專用模型的標注來減少人力投入。 ? 如果你曾經構建過計算機視覺模型&#xff0c;就就會知道監督需要大量工作——人類花時間&#xff08;數小時或數天&a…

自動化測試全攻略:從入門到精通!

1、自動化測試專欄 隨著技術的發展和工作需求的增長&#xff0c;自動化測試已成為軟件質量保障體系中不可或缺的一環。 為了幫助廣大測試工程師、開發者和對自動化測試感興趣的讀者們更好地掌握這一技能&#xff0c;今年特別推出了全新的《自動化測試全攻略&#xff1a;從入門…

scratch繪制四個三角形 2024年6月中國電子學會 圖形化編程 scratch編程等級考試二級真題和答案解析

scratch繪制四個三角形 一、題目要求 2024年6月電子學會圖形化編程Scratch等級考試二級真題 1、準備工作 1.保留默認角色小貓; 2.添加背景Stars。 2、功能實現 1 .隱藏角色小貓&#xff0c;設置畫筆裙始位置為(0,0)&#xff0c;畫筆顏色為黃色&#xff0c;畫筆的粗細為5…

Scala Trait(特征)

Scala Trait(特征) Scala中的Trait是一種特殊的概念,它類似于Java中的接口,但提供了更多的功能。Trait允許我們定義一組方法,這些方法可以被子類實現,同時還可以包含方法的實現。這使得Trait既具有接口的靈活性,又具有抽象類的實用性。在本文中,我們將深入探討Scala Tra…

NET Core 中的空對象設計模式

介紹 一種稱為“空對象模式”的行為設計模式提供了一個對象來表示接口缺少的對象。在空對象會導致空引用異常的情況下&#xff0c;這是一種提供替代行為的方法。在本文中&#xff0c;我們將深入探討 C# 空對象模式&#xff0c;并逐步解決更復雜的情況。 空對象設計模式它是什…

k8s離線部署芋道源碼前端

目錄 概述 編譯Dockerfile 構建Dockerfilenginx.conf構建 k8s部署前端鏡像部署ingress 概述 本篇將對 k8s離線部署芋道源碼前端 進行詳細的說明&#xff0c;對如何構建 Dockerfile&#xff0c;如何整合 Nginx&#xff0c;如何整合 ingress 進行實踐。 相關文章&#xff1a;naco…

python 進階教程--PIL圖像處理

PIL圖像處理 1. Pillow庫簡介2. 圖像處理基礎3. 圖像操作4. 圖像增強5. 圖像處理進階6. 圖像繪制7. 圖像序列和動畫8. 圖像識別和特征提取9. 實戰項目10. 常見問題解答 1. Pillow庫簡介 PIL與Pillow的關系 PIL&#xff08;Python Imaging Library&#xff09;是一個提供圖像處…

【云原生之kubernetes實戰】在k8s環境下部署OrangeHRM人力資源管理系統

【云原生之kubernetes實戰】在k8s環境下部署OrangeHRM人力資源管理系統 一、OrangeHRM介紹1.1 OrangeHRM 簡介1.2 OrangeHRM特點1.3 OrangeHRM使用場景二、相關知識介紹2.1 本次實踐存儲介紹2.2 k8s存儲介紹三、本次實踐介紹3.1 本次實踐簡介3.2 本次環境規劃3.3 部署前需準備工…

bash終端快捷鍵

快捷鍵作用ShiftCtrlC復制ShiftCtrlV粘貼CtrlAltT新建終端ShiftPgUp/PgDn終端上下翻頁滾動CtrlC終止命令CtrlD關閉終端CtrlA光標移動到最開始為止CtrlE光標移動到最末尾CtrlK刪除此處到末尾的所有內容CtrlU刪除此處至開始的所有內容CtrlD刪除當前字符CtrlH刪除當前字符的前一個…

Perl 語言開發(十):正則表達式,掌握強大文本處理的利器

目錄 1. 正則表達式概述 2. 基礎正則表達式語法 2.1 字符和字符類 2.2 預定義字符類 2.3 量詞 2.4 分組和捕獲 2.5 反向引用 3. Perl 中的正則表達式操作 3.1 匹配操作 3.2 替換操作 3.3 分割操作 4. 正則表達式的高級特性 4.1 非捕獲分組 4.2 前瞻和后顧 4.3 負…

Hugging face Transformers(4)—— Model

Hugging Face 是一家在 NLP 和 AI 領域具有重要影響力的科技公司&#xff0c;他們的開源工具和社區建設為NLP研究和開發提供了強大的支持。它們擁有當前最活躍、最受關注、影響力最大的 NLP 社區&#xff0c;最新最強的 NLP 模型大多在這里發布和開源。該社區也提供了豐富的教程…

【Bug優化】支付寶支付中“交易訂單處理失敗,請稍后再試”問題

引言 近期&#xff0c;一位友友問&#xff1a;他在集成支付寶支付功能時遇到了一個棘手的問題&#xff0c;當用戶在支付過程中選擇放棄支付&#xff0c;嘗試重新支付同一訂單時&#xff0c;前端會顯示“交易訂單處理失敗&#xff0c;請稍后再試”。 這個問題的核心在于支…

文章SameStr(一):圖1代碼

“Publication Figure 1” 百度云盤鏈接: https://pan.baidu.com/s/15g7caZp354zIWktpnWzWhQ 提取碼: 4sh7 Libraries Standard Import library(tidyverse) library(cowplot) library(scales) library(ggpubr)Special # devtools::install_github("pmartinezarbizu/…