最近在系统的学习SpringCloud,发现视频中有一小段代码,很不错,分享给大家。
Ribbion之手写轮询算法
public interface LoadBalancer{
ServiceInstance instances(List<ServiceInstance> serviceInstances);
}
@Component
public class MyLB implements LoadBalancer{
private AtomicInteger atomicInteger = new AtomicInteger(0);
public final int getAndIncrement(){
int current;
int next;
do{
current = this.atomicInteger.get();
next = current >= 2147483647 ? 0 :current + 1;
}while(!this.atomicInteger.compareAndSet(current,next));
return next;
}
@override
public ServiceInstance instances(List<ServiceInstance> serviceInstances){
int index = getAndIncrement()% serviceInstances.size();
return serviceInstances.get(index);
}
}
往期精彩内容:
本文分享了如何在SpringCloud Ribbon中自定义LoadBalancer,通过原子Integer实现轮询服务实例的简单手写轮询算法。通过getAndIncrement方法保证并发安全,适用于学习微服务负载均衡原理。
1095

被折叠的 条评论
为什么被折叠?



