轮询策略
robin的负载均衡默认的是轮询策略,假如微服务有A、B 2个节点,第一次请求时,访问A节点,第二次访问B节点,第三次访问A节点.....
实现思路
记录请求的次数为a,微服务节点个数为b,a与b取余(a%b),即可得到最终访问的节点序号
源码分析
轮询策略类:com.netflix.loadbalancer.RoundRobinRule
AtomicInteger类型变量记录 请求次数,CAS+自旋 实现请求次数的递增
/**
* 轮询策略类
*/
public class RoundRobinRule extends AbstractLoadBalancerRule {
/**
* 记录请求次数
*/
private AtomicInteger nextServerCyclicCounter;
private static final boolean AVAILABLE_ONLY_SERVERS = true;
private static final boolean ALL_SERVERS = false;
private static Logger log = LoggerFactory.getLogger(RoundRobinRule.class);
public RoundRobinRule() {
nextServerCyclicCounter = new AtomicInteger(0);
}
public RoundRobinRule(ILoadBalancer lb) {
this();
setLoadBalancer(lb);
}
/**
* 选择服务节点