spring cloud ribbon是乙個基於http和tcp的客戶端負載均衡工具,它基於netflix ribbon實現。通過spring cloud的封裝,可以讓我們輕鬆地將面向服務的rest模版請求自動轉換成客戶端負載均衡的服務呼叫。ribbon本地負載均衡和nginx負載均衡的區別
ribbon引入
eureka client自動帶著ribbon的依賴
>
>
org.springframework.cloudgroupid
>
>
spring-cloud-starter-netflix-eureka-clientartifactid
>
dependency
>
自己手動新增依賴
>
>
org.springframework.cloudgroupid
>
>
spring-cloud-starter-netflix-ribbonartifactid
>
dependency
>
註冊resttemplate的bean上新增@loadbalanced註解開啟負載均衡
@loadbalanced
@bean
public resttemplate resttemplate()
ribbon負載均衡規則
ribbon負載均衡規則替換
自定義值類不能放在@componentscan所掃瞄的當前包下以及子包下。否則自定義的這個配置類會被所有的ribbon客戶端所共享,達不到特殊化定製的目的。
自定義配置類,配置類所在的包不要在**@componentscan所掃瞄的當前包下以及子包下**
@configuration
public
class
myribbonrule
}
啟動型別新增@ribbonclient註解,配置調哪個服務使用什麼負載均衡規則
@enableeurekaclient
@ribbonclient
(name =
"cloud-payment-service"
,configuration = myribbonrule.
class
)//@ribbonclients
public
class
}負載均衡演算法(輪詢):呼叫介面的次數(t) % 伺服器集群的總數量c = 實際呼叫伺服器位置下標(i)。(取模) t % c= i。服務重啟 t = 0
手寫輪詢演算法
建立介面,定義傳入全部服務資訊方法
public
inte***ce
loadbalancer
建立演算法實現類,整合定義的loadbalancer介面
@component
//註冊成spring的bean
public
class
myroundrobinrule
implements
loadbalancer
while(!
this
.atomicinteger.
compareandset
(current,next));
return next;
}/**
* @param instancelist 服務資訊
* @return
*/@override
public serviceinstance instances
(list
instancelist)
catch
(interruptedexception e)
if(times >2)
}//取模,算出請求的服務的下標
int index =
getandincrement()
% instancelist.
size()
;return instancelist.
get(index);}
}
呼叫服務測試
@resource
private loadbalancer loadbalancer;
/** * 獲取註冊中心服務資訊,需要springboot啟動類新增@enablediscoveryclient註解
*/@resource
private discoveryclient discoveryclient;
(value =
"payment"
)public string getpayment()
SpringCloud負載均衡
ribbon負載均衡應用 目標 配置啟動resttemplate,訪問http user service user 8獲取服務資料 需求 可以使用ribbon負載均衡演算法從服務位址列表中選擇乙個服務位址,訪問該位址獲取服務資料 實現步驟 1.啟動多個user service 9091,9092 2...
Spring Cloud 負載均衡
在spring cloud構件微服務系統中,loadbalancer作為服務消費者的負載均衡器,有兩種使 式,種是和resttemplate相結合,另 種是和feign相結合,feign已經預設整合loadbalancer 這裡我們使用 裡面的02 payment 微服務進行改造 server po...
Spring Cloud負載均衡(二)
package com.example.springcloudlesson6 import org.springframework.cloud.client.discovery.enablediscoveryclient import org.springframework.cloud.client...