欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ribbon之轮询源码分析

程序员文章站 2022-06-22 16:20:17
...

ribbon 负载策略有

Ribbon之轮询源码分析

 

今天详细看了下  RoundRobinRule(轮询) 的实现 发现这个理论实现是真的巧妙。

Ribbon之轮询源码分析

核心 是choose() 方法

Ribbon之轮询源码分析

获取 可用servers类别 然后在列表中轮询取出server

轮询核心代码是

int nextServerIndex = this.incrementAndGetModulo(serverCount);//获取liset里的角标

Ribbon之轮询源码分析

几行代码解决轮询

其中需要了解的是 

private AtomicInteger nextServerCyclicCounter;//下一次获取的位置

AtomicInteger.get(); 获取当前值

AtomicInteger.compareAndSet(xx,xxx) 比较2个值 如果不通  后边的值覆盖当前值

拿到当前值和list的总值取模 获取此次角标

为什么nextServerCyclicCounter +1  是因为我们要更改nextServerCyclicCounter 这个值。

这样就会再nextServerCyclicCounter = list.size的时候  nextServerCyclicCounter的值又被初始化成0了 这样就达到了轮询的目的