springcloud-Ribbon之手写轮询算法
接下来是跟着阳哥进行算法的手写。先说一下看前想法:起初我以为 阳哥 是 自定义 一个类 去实现 ILoadBalancer接口,然后在实现类里面实现算法逻辑。然后发现我错了,根本就不是那么回事,也就是手写的轮询代码跟 底层代码压 没啥联系,单纯地根据轮询公式 拿到 哪台服务实例下标,然后拿到该服务器势力的URI 进行访问而已,是在下想多了。下面说实现思路。
前提是记得把@LoadBalanced注释掉,由我们自己决定哪台服务器实例
//@LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); }
1.创建一个接口 LoadBalance,定义一个方法,该方法就是拿到 提供服务的 服务器实例
public interface LoadBalanced { public ServiceInstance getNextServerIns(List<ServiceInstance> serviceInstances); //得到提供服务的服务实例 }
2.创建一个实现类,实现该接口
@Component public class MyLB implements LoadBalanced { private static final AtomicInteger curr = new AtomicInteger(0); @Override public ServiceInstance getNextServerIns(List<ServiceInstance> serviceInstances) { //拿到当前 第几次 请求 int next = getAndIncre(); //得到当前服务器的下标 int currentServerIndex = next % serviceInstances.size(); //返回服务器 return serviceInstances.get(currentServerIndex); } private static final int getAndIncre() { int current; int next; do { //获取当前请求总数 current = curr.get(); //请求总数+1 next = (current+1)>=Integer.MAX_VALUE?1:current+1; }while (!curr.compareAndSet(current, next)); return next; } }
3.测试代码。
@Autowired private LoadBalanced loadBalanced; @Autowired private DiscoveryClient discoveryClient; @Autowired private RestTemplate restTemplate;
@GetMapping("/consumer/payment/myrule") public String myLB(){ List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE"); ServiceInstance instance = loadBalanced.getNextServerIns(instances); URI uri = instance.getUri(); return restTemplate.getForObject(uri+"/payment/myrule",String.class); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~