java Spring Cloud企業快速開發架構之Ribbon結合RestTemplate實現負載均衡
在 Spring Cloud 中使用 Ribbon 會更簡單,因為 Spring Cloud 在 Ribbon 的基礎上進行了一層封裝,將很多配置都整合好了。本節將在 Spring Cloud 專案中使用 Ribbon。
使用 RestTemplate 與整合 Ribbon
Spring 提供了一種簡單便捷的模板類來進行 API 的呼叫,那就是 RestTemplate。
1.使用 RestTemplate
在前面介紹 Eureka 時,我們已經使用過 RestTemplate 了,本節會更加詳細地跟大家講解 RestTemplate 的具體使用方法。
首先我們來看看 GET 請求的使用方式:建立一個新的專案 spring-rest-template,配置好 RestTemplate:
新建一個 HouseController,並增加兩個介面,一個透過 @RequestParam 來傳遞引數,返回一個物件資訊;另一個透過 @PathVariable 來傳遞引數,返回一個字串。請儘量透過兩個介面組裝不同的形式,具體程式碼如下所示。
1
2
3
4
5
6
7
8 |
@GetMapping(
"/house/data"
) public
HouseInfo getData(@RequestParam(
"name"
)
String
name) {
return
new
HouseInfo(1L,
"上海"
"虹口"
"東體小區"
); } @GetMapping(
"/house/data/{name}"
) public
String
getData2(@PathVariable(
"name"
)
String
name) {
return
name; } |
新建一個 HouseClientController 用於測試,使用 RestTemplate 來呼叫我們剛剛定義的兩個介面,程式碼如下所示。
獲取資料結果可透過 RestTemplate 的 getForObject 方法(如下程式碼所示)來實現,此方法有三個過載的實現:
url:請求的 API 地址,有兩種方式,其中一種是字串,另一種是 URI 形式。
responseType:返回值的型別。
uriVariables:PathVariable 引數,有兩種方式,其中一種是可變引數,另一種是 Map 形式。
除了 getForObject,我們還可以使用 getForEntity 來獲取資料,程式碼如下所示。
getForEntity 中可以獲取返回的狀態碼、請求頭等資訊,透過 getBody 獲取響應的內容。其餘的和 getForObject 一樣,也是有 3 個過載的實現。
接下來看看怎麼使用 POST 方式呼叫介面。在 HouseController 中增加一個 save 方法用來接收 HouseInfo 資料,程式碼如下所示。
接著寫呼叫程式碼,用 postForObject 來呼叫,程式碼如下所示。
postForObject 同樣有 3 個過載的實現。除了 postForObject 還可以使用 postForEntity 方法,用法都一樣,程式碼如下所示。
1
2
3 |
public
<T> T postForObject(
String
url,
Object
request, Class<T> responseType,
Object
... uriVariables); public
<T> T postForObject(
String
url,
Object
request, Class<T> responseType, Map<
String
, ?> uriVariables); public
<T> T postForObject(URI url,
Object
request, Class<T> responseType); |
除了 get 和 post 對應的方法之外,RestTemplate 還提供了 put、delete 等操作方法,還有一個比較實用的就是 exchange 方法。exchange 可以執行 get、post、put、delete 這 4 種請求方式。更多地使用方式大家可以自行學習。
2.整合 Ribbon
在 Spring Cloud 專案中整合 Ribbon 只需要在 pom.xml 中加入下面的依賴即可,其實也可以不用配置,因為 Eureka 中已經引用了 Ribbon,程式碼如下所示。
RestTemplate 負載均衡示例
前面我們呼叫介面都是透過具體的介面地址來進行呼叫,RestTemplate 可以結合 Eureka 來動態發現服務並進行負載均衡的呼叫。
修改 RestTemplate 的配置,增加能夠讓 RestTemplate 具備負載均衡能力的註解 @LoadBalanced。程式碼如下所示。
修改介面呼叫的程式碼,將 IP+PORT 改成服務名稱,也就是註冊到 Eureka 中的名稱,程式碼如下所示。
介面呼叫的時候,框架內部會將服務名稱替換成具體的服務 IP 資訊,然後進行呼叫。 推薦分散式架構原始碼
@LoadBalanced 註解原理
相信大家一定有一個疑問:為什麼在 RestTemplate 上加了一個 @LoadBalanced 之後,RestTemplate 就能夠跟 Eureka 結合了,不但可以使用服務名稱去呼叫介面,還可以負載均衡?
應該歸功於 Spring Cloud 給我們做了大量的底層工作,因為它將這些都封裝好了,我們用起來才會那麼簡單。框架就是為了簡化程式碼,提高效率而產生的。
這裡主要的邏輯就是給 RestTemplate 增加攔截器,在請求之前對請求的地址進行替換,或者根據具體的負載策略選擇服務地址,然後再去呼叫,這就是 @LoadBalanced 的原理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994808/viewspace-2851234/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (20)java Spring Cloud企業快速開發架構之SpringCloud-Ribbon自定義負載均衡策略JavaSpringCloud架構GC負載
- (18)企業採購招標系統之Ribbon結合RestTemplate實現負載均衡REST負載
- Spring Cloud Ribbon負載均衡SpringCloud負載
- java Spring Cloud企業快速開發架構之SpringCloud-Spring Cloud EurekaJavaSpringCloud架構GC
- SpringCloud Fegin結合Ribbon實現負載均衡SpringGCCloud負載
- Spring Cloud之負載均衡元件Ribbon原理分析SpringCloud負載元件
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- 客服端負載均衡:Spring Cloud Ribbon負載SpringCloud
- (2)java Spring Cloud+Spring boot企業快速開發架構之Spring Cloud版本介紹JavaCloudSpring Boot架構
- Spring Cloud Ribbon 客戶端負載均衡SpringCloud客戶端負載
- Spring Cloud:自定義 Ribbon 負載均衡策略SpringCloud負載
- Spring cloud(3)-負載均衡(Feign,Ribbon)SpringCloud負載
- Ribbon實現負載均衡負載
- Spring Cloud入門教程-Ribbon實現客戶端負載均衡SpringCloud客戶端負載
- SpringCloud微服務中使用RestTemplate+Ribbon實現負載均衡(實現方法+實現原理+替換負載均衡策略)SpringGCCloud微服務REST負載
- (44)java Spring Cloud企業快速開發架構之Gateway實戰案例限流、熔斷、跨JavaSpringCloud架構Gateway
- java Spring Cloud企業快速開發架構之Spring Boot Starter的介紹及使用JavaCloud架構Spring Boot
- Spring Cloud Gateway之負載均衡SpringCloudGateway負載
- 4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明SpringCloud負載
- Spring Cloud負載均衡神器——Ribbon簡介與基本使用SpringCloud負載
- 微服務Spring Cloud17_負載均衡Ribbon6微服務SpringCloud負載
- SpringCloud微服務實戰——搭建企業級開發框架(十二):OpenFeign+Ribbon實現負載均衡SpringGCCloud微服務框架負載
- 【SpringCloud】之Ribbon負載均衡SpringGCCloud負載
- 負載均衡---ribbon負載
- 11.Spring Cloud 分散式、微服務、雲架構企業快速開發架構之Linux 磁碟管理SpringCloud分散式微服務架構Linux
- Spring Cloud:使用 Feign 實現負載均衡詳解SpringCloud負載
- Spring cloud客戶端負載均衡與ribbon的設計思路SpringCloud客戶端負載
- java Spring Cloud企業快速開發架構之SpringCloud-Eureka的REST API及API擴充套件JavaSpringCloud架構GCRESTAPI套件
- (41)java Spring Cloud企業快速開發架構之SpringCloud-Gateway的常用路由斷言工廠JavaSpringCloud架構GCGateway路由
- 7.Spring Cloud 分散式、微服務、雲架構企業快速開發架構之Linux 遠端登入SpringCloud分散式微服務架構Linux
- 微服務架構 | 4.1 基於 Ribbon 的負載均衡詳解微服務架構負載
- 8.Spring Cloud 分散式、微服務、雲架構企業快速開發架構之Linux 檔案基本屬性SpringCloud分散式微服務架構Linux
- 【SpringCloud】(六):Ribbon實現客戶端負載均衡SpringGCCloud客戶端負載
- 微服務架構如何實現客戶端負載均衡微服務架構客戶端負載
- (1)java Spring Cloud+mybatis企業快速開發架構之微服務是什麼?它的優缺點有哪些?JavaSpringCloudMyBatis架構微服務
- 9.Spring Cloud 分散式、微服務、雲架構企業快速開發架構之Linux 檔案與目錄管理SpringCloud分散式微服務架構Linux
- spring cloud 上雲的情況下,Ribbon 客戶端負載均衡 與 ALB 服務端負載均衡的選擇SpringCloud客戶端負載服務端