手写ribbon负载均衡轮询算法
通过分析Ribbon负载均衡轮询源码(RoundRobinRule.class),自己手写Ribbon负载均衡轮询算法实现RestTemplate轮询
从eureka看到有两个serviceInstance
- SPRINGCLOUD-ORDER (服务消费者)
- SPRINGCLOUD-PAYMENT(服务提供者—集群,目前是8001和8002两个)
自定义接口类MyLoadBalance返回URI
public interface MyLoadBalance {
public URI getServiceInstance();
}
实现类MyLoadBalanceImpl(主要实现)
分析负载均衡轮询算法
例如有三个集群实例 8001,8002,8003
以后请求依次是8001,8002,8003,8001,8002,8003…
相当于一个list有三个实例对象
每次请求的角标为: 下一次请求实例角标 = (当前角标数 + 1) % 实例总数量(3)
@Component
public class MyLoadBalanceImpl implements MyLoadBalance{
//定义一个原子操作类
private AtomicInteger atomicInteger;
public static final String SERVICE_ID =