Ribbon 负载均衡
负载均衡算法: 随机,轮询(Ribbon默认),hash,最小访问
实现:
1. 在消费者pom中添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2. 在restTemplate实例化方法上加上注解 @LoadBalanced
3. 将URL改成 http://服务ID
修改负载均衡算法配置
*# 改为随机*
user-server.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
拓展:
负载均衡里面获取Url的代码(类RibbonLoadBalancerClient):
Server server = this.getServer(loadBalancer, hint);
负载均衡默认轮询代码(BaseLoadBalancer类)
private final static IRule DEFAULT_RULE = new RoundRobinRule();
轮询算法:
private int incrementAndGetModulo(int modulo) {
for (;;) {
int current = nextIndex.get();
int next = (current + 1) % modulo;
if (nextIndex.compareAndSet(current, next) && current < modulo)
return current;
}
}