Ribbon負(fù)載均衡算法原理與使用介紹
負(fù)載均衡算法:rest接口第幾次請(qǐng)求數(shù) % 服務(wù)器集群總數(shù)量 = 實(shí)際調(diào)用服務(wù)器位置下標(biāo) ,每次服務(wù)重啟動(dòng)后rest接口計(jì)數(shù)從1開始。
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
如:
List [0] instances = 127.0.0.1:8002
List [1] instances = 127.0.0.1:8001
8001+ 8002 組合成為集群,它們共計(jì)2臺(tái)機(jī)器,集群總數(shù)為2, 按照輪詢算法原理:
當(dāng)總請(qǐng)求數(shù)為1時(shí): 1 % 2 =1 對(duì)應(yīng)下標(biāo)位置為1 ,則獲得服務(wù)地址為127.0.0.1:8001
當(dāng)總請(qǐng)求數(shù)位2時(shí): 2 % 2 =0 對(duì)應(yīng)下標(biāo)位置為0 ,則獲得服務(wù)地址為127.0.0.1:8002
當(dāng)總請(qǐng)求數(shù)位3時(shí): 3 % 2 =1 對(duì)應(yīng)下標(biāo)位置為1 ,則獲得服務(wù)地址為127.0.0.1:8001
當(dāng)總請(qǐng)求數(shù)位4時(shí): 4 % 2 =0 對(duì)應(yīng)下標(biāo)位置為0 ,則獲得服務(wù)地址為127.0.0.1:8002
如此類推......
寫一個(gè)本地負(fù)載均衡器
設(shè)現(xiàn)在有倆個(gè)服務(wù)端口8001 8002幼由80端口調(diào)動(dòng)
其中8001 8002 的controller中
@GetMapping(value = "/payment/lb")
public String getPaymentLB()
{
return serverPort;
}80 的一個(gè)接口為:
public interface LoadBalancer
{
ServiceInstance instances(List<ServiceInstance> serviceInstances);
}
實(shí)現(xiàn)類
@Component
public class MyLB implements LoadBalancer
{
private AtomicInteger atomicInteger = new AtomicInteger(0);
public final int getAndIncrement()
{
int current;
int next;
do
{
current = this.atomicInteger.get();
next = current >= 2147483647 ? 0 : current + 1;
} while(!this.atomicInteger.compareAndSet(current, next));
System.out.println("*****next: "+next);
return next;
}
@Override
public ServiceInstance instances(List<ServiceInstance> serviceInstances)
{
int index = getAndIncrement() % serviceInstances.size();
return serviceInstances.get(index);
}
}調(diào)用 方法
@Resource
private RestTemplate restTemplate;
//可以獲取注冊(cè)中心上的服務(wù)列表
@Resource
private DiscoveryClient discoveryClient;
@Resource
private LoadBalancer loadBalancer;
@GetMapping("/consumer/payment/lb")
public String getPaymentLB()
{
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
if(instances == null || instances.size()<=0) {
return null;
}
ServiceInstance serviceInstance = loadBalancer.instances(instances);
URI uri = serviceInstance.getUri();
return restTemplate.getForObject(uri+"/payment/lb",String.class);
}ApplicationContextBean去掉注解@LoadBalanced

到此這篇關(guān)于Ribbon負(fù)載均衡算法原理與使用介紹的文章就介紹到這了,更多相關(guān)Ribbon負(fù)載均衡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot獲取微信用戶信息的超簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于Spring Boot獲取微信用戶信息的超簡(jiǎn)單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Spring?Data?JPA?映射VO/DTO對(duì)象方式
這篇文章主要介紹了Spring?Data?JPA?映射VO/DTO對(duì)象方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
spring-core組件詳解——PropertyResolver屬性解決器
這篇文章主要介紹了spring-core組件詳解——PropertyResolver屬性解決器,需要的朋友可以參考下2016-05-05
java實(shí)現(xiàn)模擬進(jìn)度計(jì)量器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)模擬進(jìn)度計(jì)量器,模擬血壓計(jì)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例
這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例,一般來說DSA算法用于簽名的效率會(huì)比RSA要快,需要的朋友可以參考下2016-04-04
java中BigDecimal的介紹及使用教程BigDecimal格式化及BigDecimal常見問題
BigDecimal是Java在java.math包中提供的線程安全的API類,用來對(duì)超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算,這篇文章主要介紹了java中BigDecimal的介紹及使用,BigDecimal格式化,BigDecimal常見問題,需要的朋友可以參考下2023-08-08
java單元測(cè)試JUnit框架原理與用法實(shí)例教程
這篇文章主要介紹了java單元測(cè)試JUnit框架原理與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了java單元測(cè)試JUnit框架的概念、原理、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-11-11

