Ribbon 负载均衡实现
创始人
2024-05-29 15:30:45
0

1. 依赖

org.springframework.cloudspring-cloud-starter-netflix-ribbon

2. 配置

my-service:ribbon:listOfServers: example.com:8080, example.net:8080

常用配置项:
ribbon.eureka.enabled:指定是否启用Ribbon与Eureka服务器集成。默认为true。

ribbon.client.name:指定Ribbon客户端的名称。当使用Spring Cloud Netflix时,该值通常是服务名。

ribbon.NFLoadBalancerRuleClassName:指定负载均衡算法的类名。如果未指定,则使用默认的RoundRobinRule算法。

ribbon.ReadTimeout:指定读取超时时间,以毫秒为单位。如果在此时间内没有收到响应,则请求将被中断。

ribbon.ConnectTimeout:指定连接超时时间,以毫秒为单位。如果在此时间内无法建立连接,则请求将被中断。

ribbon.OkToRetryOnAllOperations:指定在发生故障时是否应重试所有操作。默认为false。

ribbon.MaxAutoRetries:指定自动重试操作的最大次数。默认为0,表示不进行自动重试。

ribbon.MaxAutoRetriesNextServer:指定在下一个服务器上进行自动重试的最大次数。默认为1。

ribbon.ServerListRefreshInterval:指定更新服务器列表的间隔时间,以毫秒为单位。

ribbon.ServerListRefreshInitialDelay:指定在第一次更新服务器列表之前的延迟时间,以毫秒为单位。

ribbon.ServerListClassName:指定服务器列表的实现类。如果未指定,则使用默认的ConfigurationBasedServerList实现。

ribbon.ServerListFilterClassName:指定用于筛选服务器列表的类的名称。如果未指定,则不应用任何过滤器。

ribbon.EnablePrimeConnections:指定是否启用Prime Connections。默认为false。

3. 实现

@Configuration
public class MyLoadBalancerConfiguration {@Beanpublic IRule myLoadBalancingRule() {return new MyLoadBalancingRule();}private static class MyLoadBalancingRule extends AbstractLoadBalancerRule {private AtomicInteger nextServerCyclicCounter;public MyLoadBalancingRule() {nextServerCyclicCounter = new AtomicInteger(0);}@Overridepublic Server choose(Object key) {List allServers = getLoadBalancer().getAllServers();if (allServers.isEmpty()) {return null;}int nextServerIndex = incrementAndGetModulo(allServers.size());return allServers.get(nextServerIndex);}private int incrementAndGetModulo(int modulo) {int current;int next;do {current = nextServerCyclicCounter.get();next = (current + 1) % modulo;} while (!nextServerCyclicCounter.compareAndSet(current, next));return next;}}
}

4. 发送请求

@Service
public class MyService {@Autowiredprivate RestTemplate restTemplate;public String callMyService() {String response = restTemplate.getForObject("http://my-service/path/to/resource", String.class);return response;}
}

Ps

其中的循环遍历可用代码的服务器列表的代码是

List allServers = getLoadBalancer().getAllServers();if (allServers.isEmpty()) {return null;
}int nextServerIndex = incrementAndGetModulo(allServers.size());
return allServers.get(nextServerIndex);

or

private AtomicInteger nextServerCyclicCounter;public MyLoadBalancingRule() {nextServerCyclicCounter = new AtomicInteger(0);
}private int incrementAndGetModulo(int modulo) {int current;int next;do {current = nextServerCyclicCounter.get();next = (current + 1) % modulo;} while (!nextServerCyclicCounter.compareAndSet(current, next));return next;
}

相关内容

热门资讯

张天灵安卓系统,引领智能生活新... 你知道吗?最近在手机圈里,有个名字可是火得一塌糊涂,那就是张天灵安卓系统。没错,就是那个让无数手机用...
安卓系统使用官方文档,系统架构... 你有没有想过,你的安卓手机里那些神奇的软件和功能,其实都是基于一个强大的系统——安卓系统?没错,就是...
安卓系统哪个系列最好,探索最佳... 你有没有想过,手机里的安卓系统就像是一群各具特色的英雄,每个系列都有它的独门绝技。那么,问题来了,安...
安卓修改系统时间设置,安卓系统... 你有没有发现,有时候手机上的时间总是和你心中的时间不太一样?是不是有时候你明明觉得才刚过中午,一看手...
安卓系统制裁华为,自主创新之路 你知道吗?最近安卓系统对华为下手了,这可真是让人大跌眼镜啊!华为作为我国科技界的佼佼者,一直以来都备...
安卓系统隐藏扣费,揭秘恶意应用... 你知道吗?在安卓系统的世界里,有时候会有一些小秘密,就像隐藏的宝藏一样,让人意想不到。今天,我就要来...
低安卓系统游戏推荐,盘点那些让... 手机里的游戏是不是已经玩腻了?别急,今天就来给你推荐一些适合低安卓系统运行的游戏,让你的手机焕发第二...
真我是安卓系统嘛,揭秘安卓系统... 亲爱的读者,你是否曾好奇过,自己手中的安卓手机,它的“灵魂”究竟是不是安卓系统呢?这个问题听起来可能...
安卓儿童手表换系统,轻松换新体... 你家的安卓儿童手表是不是已经陪伴了孩子好长一段时间了呢?是不是觉得它有点儿“老态龙钟”,想要给它来个...
王者安卓系统如何退钱,快速返还 你是不是在王者荣耀里花了点小钱,现在想退回来呢?别急,今天就来手把手教你如何用王者安卓系统退钱,让你...
安卓系统instagram哪里... 你有没有发现,最近你的手机里少了点什么?没错,就是那个让你每天刷到停不下来的社交神器——Instag...
安卓系统怎样用苹果系统,系统切... 你是不是也和我一样,对安卓系统和苹果系统都情有独钟呢?有时候,手头上的安卓设备用得正得心应手,突然又...
平板安卓系统价格多少,不同档次... 你有没有想过,拥有一台平板电脑,是不是就能随时随地享受大屏幕的观影体验,或者轻松处理工作上的事情呢?...
日历app推荐安卓系统,生活更... 你有没有发现,时间就像那溜走的沙子,不经意间就悄悄溜走了。想要抓住时间的尾巴,一款好用的日历app可...
山水投影删除安卓系统,基于山水... 你有没有想过,家里的电视屏幕上突然出现一幅幅流动的山水画,美得让你仿佛置身于仙境?这可不是梦,而是现...
安卓怎么换系统版本,轻松切换至... 亲爱的安卓用户们,你是否对手机系统版本升级充满了好奇和期待?想要让你的手机焕然一新,体验更流畅的性能...
安卓系统 定时锁屏,智能守护您... 你有没有发现,手机这玩意儿,简直就是现代生活的得力助手,但有时候,它也像个调皮的小家伙,时不时地给你...
小米手机安卓系统rom,功能与... 你有没有发现,最近小米手机的热度又上来了?没错,就是那个以性价比著称的小米。今天,咱们就来聊聊小米手...
安卓8.0系统自动重启,安卓8... 最近你的安卓手机是不是也遇到了一个让人头疼的问题?没错,就是那个让人抓狂的自动重启!是不是每次正在关...
安卓导航进入系统设置,解锁个性... 亲爱的手机控们,你是否曾在某个午后,手捧着你的安卓手机,突然想探索一下它的深处,看看那些隐藏在系统设...