Ribbon負載均衡算法原理與使用介紹
負載均衡算法:rest接口第幾次請求數(shù) % 服務器集群總數(shù)量 = 實際調(diào)用服務器位置下標 ,每次服務重啟動后rest接口計數(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 組合成為集群,它們共計2臺機器,集群總數(shù)為2, 按照輪詢算法原理:
當總請求數(shù)為1時: 1 % 2 =1 對應下標位置為1 ,則獲得服務地址為127.0.0.1:8001
當總請求數(shù)位2時: 2 % 2 =0 對應下標位置為0 ,則獲得服務地址為127.0.0.1:8002
當總請求數(shù)位3時: 3 % 2 =1 對應下標位置為1 ,則獲得服務地址為127.0.0.1:8001
當總請求數(shù)位4時: 4 % 2 =0 對應下標位置為0 ,則獲得服務地址為127.0.0.1:8002
如此類推......
寫一個本地負載均衡器
設現(xiàn)在有倆個服務端口8001 8002幼由80端口調(diào)動
其中8001 8002 的controller中
@GetMapping(value = "/payment/lb")
public String getPaymentLB()
{
return serverPort;
}80 的一個接口為:
public interface LoadBalancer
{
ServiceInstance instances(List<ServiceInstance> serviceInstances);
}
實現(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;
//可以獲取注冊中心上的服務列表
@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

到此這篇關于Ribbon負載均衡算法原理與使用介紹的文章就介紹到這了,更多相關Ribbon負載均衡內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mybatis collection關聯(lián)查詢多個參數(shù)方式
在使用MyBatis進行關聯(lián)查詢時,往往需要根據(jù)多個參數(shù)進行查詢,例如,使用evtId和businessType作為查詢條件,同時在resultMap中配置id和businessType1作為結(jié)果映射,這種情況下,可以通過<sql>標簽定義參數(shù)模板,或者使用@Param注解指定參數(shù)名稱2024-10-10
Spring中的監(jiān)聽器SpringApplicationRunListener詳解
這篇文章主要介紹了Spring中的監(jiān)聽器SpringApplicationRunListener詳解,命名我們就可以知道它是一個監(jiān)聽者,分析springboot啟動流程我們會發(fā)現(xiàn),它其實是用來在整個啟動流程中接收不同執(zhí)行點事件通知的監(jiān)聽者,需要的朋友可以參考下2023-11-11
Spring Cloud 負載均衡器 Ribbon原理及實現(xiàn)
這篇文章主要介紹了Spring Cloud 負載均衡器 Ribbon原理及實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03

