在IDEA中使用RestTemplate方式進行微服務之間相互調用

2021-01-10 資料庫及DotNet開發

接著前面2篇文章

下面繼續創建一個微服務項目,並通過RestTemplate方式進行2個微服務項目之間調用。

1、在項目父目錄上右鍵選擇New->Module,如下圖所示:

2、在左側選擇Spring Initializr,然後點擊Next,如下圖所示:

3、輸入Group和Artifact,然後點擊Next,如下圖所示:

4、在左側Dependencies中選擇Cloud Discovery,右側選擇Eureka Discovery,然後點擊Next,如下圖所示:

5、輸入Module name等信息後,然後點擊Finish,如下圖所示:

6、重命名resources目錄下的application.properties後綴名為yml,如下圖所示:

7、輸入以下內容

server: port: 8082spring: application: name: client-02eureka: client: service-url: defaultZone: http://localhost:8080/eureka

如下圖所示:

8、創建一個Controller類,如下圖所示:

9、Controller類的代碼如下

package com.baijiahao.eurekaclient2.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/client2")public class HomeController { @GetMapping("/showmsg") public String ShowMsg(){ return "我是微服務client2"; }}

如下圖所示:

10、在pom.xml中添加dependency配置信息

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>RELEASE</version> <scope>compile</scope></dependency>

如下圖所示:

11、在IDEA右上角,先啟動Eureka,然後啟動微服務1,然後再啟動微服務2,如下圖所示:

12、刷新Eureka服務中心,此時可以看到有2個微服務註冊到服務中心了,如下圖所示:

13、我們返回到微服務1的Controller類中修改方法,核心代碼如下:

/*第一種寫法:直接使用RestTemplate,URL地址固定,需要事先知道對方微服務的IP位址,如果對方的微服務有多個IP位址的話(分布式),則局限性較大 */RestTemplate template = new RestTemplate();String retMsg = template.getForObject("http://localhost:8082/client2/showmsg",String.class);return retMsg;

如下圖所示:

@Autowiredprivate LoadBalancerClient loadBalancerClient;

/*第二種寫法:通過LoadBalancerClient類獲取到註冊到Eureka服務中心的應用程式名稱,然後再使用RestTemplate */RestTemplate template = new RestTemplate();ServiceInstance serviceInstance = loadBalancerClient.choose("client-02");/String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/client2/showmsg");String retMsg = template.getForObject(url,String.class);return retMsg;

創建RestTemplateConfig類,寫法更簡單,直接使用註冊到Eureka註冊中心的微服務應用名稱來作為IP位址和埠號

/*第三種寫法:利用@LoadBalanced,可在restTemplate裡使用應用的名稱 */

String retMsg = restTemplate.getForObject("http://client-02/client2/showmsg",String.class);return retMsg;

14、此時無論我們使用以上三個方法中的任意一個方法,來訪問微服務1,頁面將顯示微服務2中的方法的返回值,如下圖所示:

相關焦點

  • SpringBoot圖文教程17—上手就會 RestTemplate 使用指南
    >SpringBoot圖文教程6—SpringBoot中過濾器的使用SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有SpringBoot圖文教程8—SpringBoot集成MBG「代碼生成器」SpringBoot
  • 微服務,Java目前很火熱的系統架構
    服務之間的調用方式:HTTP和RPC。 Spring提供的RestTmeplate模板的使用。當然系統架構肯定不是說我一篇文章就能學好的,只能說我作為一名初學者,是如何去理解這些概念的。至於想要真正地去弄懂這些,需要自己長期性地不斷學習,非一朝一夕就能學完的。
  • 從 Spring Cloud 看懂一個微服務框架的「五臟六腑」
    準確地說微服務是去 ESB(企業服務總線)的 SOA。ESB 借鑑了計算機組成原理中的通信模型 —— 總線,所有需要和外部系統通信的系統,通過 ESB 進行標準化地轉換從而消除協議、異構系統之間的差異,這樣就可以利用現有的系統構建一個全新的鬆耦合的異構的分布式系統。微服務架構去掉 ESB,本質上是一種去中心化的思想。
  • RestTemplate請求數據中文亂碼源碼分析
    charset值時,restTemplate的 StringHttpMessageConverter會讀取該charset值,並使用該值進行IO流 =》字符串的轉換,否則則使用默認的字符集。通過源碼可以發現restTemplate底層默認使用了HttpURLConnection,可以支持其他多種http客戶端,如httpclient、okhttp等,通過工廠方法模式創建請求:restTemplate調用excute方法
  • 放棄Dubbo,選擇最流行的Spring Cloud微服務架構實踐與經驗總結
    最重要的是大家體會到使用 Spring Boot 的各種便利之後,就再也不想使用傳統的方式來進行開發了。但是還有一個問題,在選擇了 Spring Boot 進行新業務開發的同時,並沒有解決我們上面的那個問題,服務與服務直接調用仍然比較複雜和傳統,這時候我們就開始研究 Spring Cloud。
  • 理解gRPC,以及表現層狀態轉換與遠程過程調用架構之間的區別
    全文共2925字,預計學習時長9分鐘在今天的文章,小芯將帶著大家對gRPC進行高層次的了解,還將解釋gRPC與網絡應用程式通信所遵循的現有協議和體系結構之間的異同。gRPC是一個開源的遠程過程調用框架,用於伺服器間的高效對接。通過可插拔接口有效連接不同語言編寫的伺服器,進行負載平衡、跟蹤、運行狀況檢查和身份驗證。默認情況下,gRPC通過一種輕便高效的結構化存儲格式,對數據序列化。一般來說,gRPC被認為是微服務架構中REST協議更好的替代方案。gRPC中的「g」來源於最初開發這項技術的谷歌。
  • 微服務是什麼?十分鐘了解微服務架構
    好的微服務架構,就應該儘量避免這種問題;非要修改服務契約的話,也得循序漸進,讓調用者有跡可循,不用私下協調。使用服務作為組件的另一個後果是更顯式的組件接口。大多數語言都沒有很好的機制來定義顯式發布的接口。通常,只有文檔和規程可以防止客戶機破壞組件的封裝,從而導致組件之間的緊密耦合。通過使用顯式的遠程調用機制,服務可以更容易地避免這種情況。
  • 學會 IDEA REST Client後,postman就可以丟掉了...
    但是當使用了IDEA REST之後,postman就可以丟了,因為,IDEA REST Client具有postman的所有功能,而且還有postman沒有的功能,繼續往下看。歷史請求記錄IntelliJ IDEA自動將最近執行的50個請求保存到http-requests-log.http 文件中,該文件存儲在項目的.idea / httpRequests / 目錄下。
  • IBM高級架構師結合Java多線程和Socket,帶你實戰微服務架構
    要明確的是,面向服務的架構中的「服務」雖然也包括系統對外提供的服務,但更多的是指系統內部的各個「模塊」或「組件」的「服務化」,以及模塊(服務)之間的相互調用與協同。它是「分布式」與「服務化」兩個技術發展趨勢合流的產物。分布式系統所謂的「分布式」是相對於「集中式」的一種應用系統內部組織結構。
  • 「微服務架構」微服務架構中的數據一致性
    在微服務中,一個邏輯上原子操作可以經常跨越多個微服務。即使是單片系統也可能使用多個資料庫或消息傳遞解決方案。使用多個獨立的數據存儲解決方案,如果其中一個分布式流程參與者出現故障,我們就會面臨數據不一致的風險 - 例如在未下訂單的情況下向客戶收費或未通知客戶訂單成功。在本文中,我想分享一些我為使微服務之間的數據最終保持一致而學到的技術。
  • 輕量級微服務架構及最佳部署
    (4)日誌中心:用於收集並管理微服務應用程式中產生的日誌,第2章中將詳細介紹。(5)監控中心:用於監控微服務的實時運行狀況,第3章中將詳細介紹。(6)追蹤中心:用於最終微服務的調用軌跡,第3章中將詳細介紹。(7)消息中心:用於解耦微服務之間的調用關係,第5章中將詳細介紹。
  • 面試都在問的微服務,一文帶你徹底搞懂!
    ❝    2014年,Martin Fowler 與 James Lewis 共同提出了微服務的概念,定義了微服務是由以單一應用程式構成的小服務,自己擁有自己的行程與輕量化處理,服務依業務功能設計,以全自動的方式部署,與其他服務使用 HTTP API 通信。同時服務會使用最小的規模的集中管理 (例如 Docker) 能力,服務可以用不同的程式語言與資料庫等組件實現 。
  • 使用idea live templates,編碼速度再提升!
    idea自帶的live templates可以在Settings -> Editor -> Live Templates看到。除了使用idea自帶的live templates,我們也可以自定義live templates。
  • 2021升級版微服務教程—為什麼會有微服務?什麼是SpringCloud?
    問題:不同業務模塊之間的耦合太高,一個模塊出問題整個伺服器宕機維護困難,假如應用伺服器集群200臺,那麼項目上線意味著需要部署200臺伺服器譬如:修改了訂單的代碼 訂單模塊要重新部署 意味著所有的伺服器都需要重新部署一遍冗餘,有些模塊沒有必要部署在所有的伺服器上招人:100個人的團隊,對項目進行新的優化和升級—服務化(SOA),根據業務模塊的不同,拆分為不同的應用。
  • 談數據:微服務環境下,數據如何治理?
    不論是哪種中臺,它的核心思想都是企業能力和資源的共享和復用,實現這些能力和資源的集約化管理,並能夠對不斷變化的業務需求進行靈活,快速響應。簡單來講,中臺是一種企業能力共享、資源復用的方法論。而微服務是一種可獨立部署、獨立運行、獨立維護的業務應用單元,它是一種技術架構模式。從這個層面講,中臺與微服務之間沒有半毛錢關係。
  • 厲害了,教你用 Spring Cloud 實現微服務
    Spring Session:session管理的開發工具包,讓你可以把session保存到redis等,進行集群化session管理。Spring Web Services:是基於Spring的Web服務框架,提供SOAP服務開發,允許通過多種方式創建Web服務。
  • F版本SpringCloud1—大白話為啥要有微服務?啥是微服務?
    前言為什麼要有微服務呢?什麼是微服務?SpringCloud 中為什麼會有那麼多的組件?......作為SpringCloud教程的第一篇,不講解具體的技術使用,通過一個通俗易懂的小故事,來解決這些疑惑。
  • 基於Spring Boot和Spring Cloud實現微服務架構
    Spring Session:session管理的開發工具包,讓你可以把session保存到redis等,進行集群化session管理。Spring Web Services:是基於Spring的Web服務框架,提供SOAP服務開發,允許通過多種方式創建Web服務。
  • 我的天,你們公司的「微服務」簡直就是反人類……
    比如說有一個信貸系統,分為貸前,貸中,貸後三步:在微服務未出現之前,我們大多是單體應用,基本上一個工程包含所有,無所不能,所以很臃腫。上述這些模塊應該都是在一個工程中,但是按照業務做了代碼上的拆分。另外就是 RPC 框架橫空出世,如果有服務上的拆分,比如不同部門之間調用對方提供的服務,那麼八九不離十肯定定義的是 HTTP 接口,因為通用。
  • 第二章:微服務註冊中心Eureka入門
    舉個現實生活中的例子,比如說,我們手機中的通訊錄的兩個使用場景,1、當我想給張三打電話時,那我需要在通訊錄中按照名字找到張三,然後就可以找到他的手機號撥打電話。可以說是微服務架構中的」通訊錄「,它記錄了服務和服務地址的映射關係。在分布式架構中,服務會註冊到這裡,當服務需要調用其它服務時,就到這裡找到服務的地址,進行調用。