Ribbon的基本使用
Ribbon一、概述Ribbon是Netflix公司提供的一个基于HTTP和TCP的客户端负载均衡工具。Eureka中自带Ribbon了!Ribbon主要有两个功能:简化远程调用负载均衡客户端负载均衡:负载均衡算法在服务端由负载均衡器维护服务地址列表服务端负载均衡:负载均衡算法在客户端客户端维护服务地址列表二、入门案例:简化远程调用:步骤:使用 Ribbon 简化restTemplate调用
·
Ribbon
一、概述
Ribbon是Netflix公司提供的一个基于HTTP和TCP的客户端负载均衡工具。
Eureka中自带Ribbon了!
Ribbon主要有两个功能:
服务端负载均衡:
- 负载均衡算法在客户端
- 客户端维护服务地址列表
二、入门案例:
简化远程调用:
步骤:
使用 Ribbon 简化restTemplate调用
1. 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
2. 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的 应用名称
-
在config类中的
@Bean
上再加一个注解@LoadBalanced
-
在调用的时候直接使用服务名
String url="http://EUREKA-PROVIDE/goods/findOne/"+id; Goods goods = restTemplate.getForObject(url, Goods.class);
-
重启,访问下就能看到效果了!
负载均衡:
在provider中加上几行代码,显示调用的端口号
@Autowired
private GoodsService goodsService;
@Value("${server.port}")
private Integer port;
@RequestMapping("/findOne/{id}")
public Goods findOne(@PathVariable Integer id){
Goods goods = goodsService.findOne(id);
goods.setTitle(goods.getTitle()+":"+port);//将端口号,设置到了 商品标题上
return goods;
}
结果显示8001和8002交替显示,显然是轮询!
Ribbon负载均衡策略:
- 随机 :RandomRule
- 轮询 :RoundRobinRule(默认的负载均衡策略)
- 最小并发:BestAvailableRule(服务A-1,服务A-2,服务A-3,这三个服务中谁最闲一般认为是性能高)
- 过滤:AvailabilityFilteringRule(坏的服务过滤掉)
- 响应时间:WeightedResponseTimeRule(发送一个数据包到三个服务中,看谁最先响应,谁快就调用谁)
- 轮询重试:RetryRule(默认轮询10次,如果节点出现问题,会去找第二个,如果轮询到10次都挂了那就响应失败)
- 性能可用性:ZoneAvoidanceRule(综合考虑性能和可用性,看谁分数高就用谁)
负载均衡配置:
Ribbon默认的负载均衡策略是轮询,如果机器性能差不多,用轮询比较合适。
设置负载均衡策略:两种方法:
-
JAVA编码的方式
-
创建一个配置类
@Configuration public class MyRule { @Bean public IRule rule(){ return new RandomRule(); } }
注意:这个
new RandomRule()
可以改成其他IRule接口的实现类
-
-
在项目启动类上加上这个注解,指定服务名和规则配置类
/* 配置Ribbon的负载均衡策略 name * name:设置 服务提供方的 应用名称 * configuration:设置负载均衡Bean */ @RibbonClient(name = "EUREKA-PROVIDE",configuration = MyRule.class)
-
配置文件的方式
在application.yml中指定服务的负载均衡策略:
# 配置的方式设置Ribbon的负载均衡策略 EUREKA-PROVIDER: # 设置的服务提供方的 应用名称 ribbon: NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略类(全路径名)
置的服务提供方的 应用名称
ribbon:
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略类(全路径名)
更多推荐
已为社区贡献1条内容
所有评论(0)