Ribbon之轮询源码分析
程序员文章站
2022-06-22 16:20:17
...
ribbon 负载策略有
今天详细看了下 RoundRobinRule(轮询) 的实现 发现这个理论实现是真的巧妙。
核心 是choose() 方法
获取 可用servers类别 然后在列表中轮询取出server
轮询核心代码是
int nextServerIndex = this.incrementAndGetModulo(serverCount);//获取liset里的角标
几行代码解决轮询
其中需要了解的是
private AtomicInteger nextServerCyclicCounter;//下一次获取的位置
AtomicInteger.get(); 获取当前值
AtomicInteger.compareAndSet(xx,xxx) 比较2个值 如果不通 后边的值覆盖当前值
拿到当前值和list的总值取模 获取此次角标
为什么nextServerCyclicCounter +1 是因为我们要更改nextServerCyclicCounter 这个值。
这样就会再nextServerCyclicCounter = list.size的时候 nextServerCyclicCounter的值又被初始化成0了 这样就达到了轮询的目的
推荐阅读
-
Netty源码分析之核心线程处理
-
php源码分析之DZX1.5随机数函数random用法,dzx1.5random
-
yii框架源码分析之创建controller代码
-
JDK源码分析(10)之 Hashtable 相关
-
yii框架源码分析之创建controller代码_PHP教程
-
JDK源码分析之String、StringBuilder和StringBuffer
-
JDK源码分析之String、StringBuilder和StringBuffer
-
Java基础之LinkList 源码分析
-
scrapy-redis源码分析之发送POST请求详解
-
Springboot源码分析之Spring循环依赖揭秘