SpringCloud04 Robbin負載均衡

2021-10-19 11:19:19 字數 2717 閱讀 3071

在上面的示例中,如果註冊了多個 user-service 服務,那麼在客戶端進行呼叫的時候如何來選擇服務呢?這時就需要客戶端來進行負載均衡。而在 springcloud 中,一般推薦使用ribbon 來實現負載均衡。

robbin 是 netflix 發布的乙個負載均衡器,在 springcloud 中,eureka 一般都是和 ribbon 一起使用。eureka 負責服務的註冊與發現,而 ribbon 則提供了客戶端負載均衡的功能。

加入 robbin 負載均衡之後工程架構如下圖所示:

啟動兩個 user-service 例項。分別使用埠:8080,8090。

啟動完成之後,檢視 eureka 的監控介面如下所示:

1、ribbon 依賴

在 consumer 專案中增加對 ribbon 的依賴。

<

!--增加對 ribbon 的依賴--

>

org.springframework.cloud<

/groupid>

spring-cloud-starter-netflix-ribbon<

/artifactid>

<

/dependency>

但是在 eureka 中已經包含了對 ribbon 的依賴,所以上面的依賴可以省略。

2、在 consumer 的 resttemplate 配置方法上新增註解:@loadbalanced

啟動類:

@enablediscoveryclient

public

class

public

static

void

main

(string[

] args)

}(value=

"/detail/"

public user customer

(@pathvariable

("id"

)string id)

在上面的示例中,使用 robbin 來負責負載均衡問題,但是並沒有去設定如何負載均衡的。那麼預設情況下,將使用輪詢的策略。

在 robbin 中,負責負載均衡的頂層介面為:com.netflix.loadbalancer.irule。所有的負載均衡演算法都是實現的這個介面。

1、預設負載均衡策略:

2、常用負載均衡策略:

userservice: # 配置服務的負載均衡

ribbon:

nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule

如果在系統執行過程中,服務如果掛掉乙個,那麼 eureka 並不會馬上將失效的服務剔除。那麼 consumer 也不會馬上獲取到最新的服務列表,那麼如果這個時候呼叫了失效的服務就會出現錯誤。然而這個時候還有正常的服務能夠為其提供服務。

所以,springcloud 整合了 spring retry 來增強 resttemplete 的重試能力。當一次服務呼叫失敗後,不會立即丟擲異常,而是再次重試另乙個服務。具體操作如下:

1、在 consumer 中加入 retry 的依賴

<

!-- 重試依賴 --

>

org.springframework.retry<

/groupid>

spring-retry<

/artifactid>

<

/dependency>

2、在 consumer 中加入如下配置

userservice:

ribbon:

# nfloadbalancerruleclassname: com.netflix.loadbalancer.randomrule

connecttimeout:

250 # ribbon 的連線超時時間

readtimeout:

1000 # ribbon 的資料讀取超時時間

oktoretryonalloperations:

true # 是否對所有操作都進行重試

maxautoretriesnextserver:

1 # 切換例項的重試次數

maxautoretries:

1 # 對當前例項的重試次數

logging:

level:

root: debug #方便檢視呼叫日誌

從0開始構建SpringCloud微服務 1

照例附上專案github鏈結 本專案實現的是將乙個簡單的天氣預報系統一步一步改造成乙個springcloud微服務系統的過程,第一節將介紹普通天氣預報系統的簡單實現。資料 1 深圳 資料 2 資料 3 根據返回的資料格式在vo包下面建立pojo。建立weatherdataservice在其中提供如下...

從0開始構建SpringCloud微服務 1

照例附上專案github鏈結 本專案實現的是將乙個簡單的天氣預報系統一步一步改造成乙個springcloud微服務系統的過程,第一節將介紹普通天氣預報系統的簡單實現。資料 1 深圳 資料 2 資料 3 根據返回的資料格式在vo包下面建立pojo。建立weatherdataservice在其中提供如下...

從0開始構建SpringCloud微服務 1

照例附上專案github鏈結 本專案實現的是將乙個簡單的天氣預報系統一步一步改造成乙個springcloud微服務系統的過程,第一節將介紹普通天氣預報系統的簡單實現。資料 1 深圳 資料 2 資料 3 根據返回的資料格式在vo包下面建立pojo。建立weatherdataservice在其中提供如下...