ribbon和eureka都是来自同一个公司,导入eureka坐标之后不需要再导入ribbon的坐标了。ribbon是客户端负载均衡工具。
服务端负载均衡:负载均衡算法在服务端,由负载均衡器维护服务地址列表。
客户端负载均衡:负载均衡在客户端,客户端维护服务地址列表。
一. Ribbon远程调用
1.1 简化RestTemplate远程调用步骤
使用步骤:
- RestTemplateConfig类下面的@bean注解上再加一个@LoadBalanced。
在使用RestTemplate发起远程请求的,需要定义url时,host:port可以替换为 服务提供方 的应用名称。
1.2 代码演示
/**
* 服务的调用方
*/
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/goods/{id}")
public Goods findGoodsById(@PathVariable("id") int id){
String url = "http://服务提供方的应用名称/goods/findOne/"+id;
// 3. 调用方法
Goods goods = restTemplate.getForObject(url, Goods.class);
return goods;
}
}
注意:到此为止并不是最终解决方案。
二. Ribbon负载均衡
2.1 负载均衡演示
- 启动两个以上的eureka提供者(同一个提供者)。
- ribbon默认集成负载均衡,直接可以使用消费者consumer进行访问即可。
默认情况下,ribbon的负载军均衡策略是轮询(即一个服务请求一次)。
2.2 负载均衡策略
- 随机:RandomRule
- 轮询:RoundRobinRule
- 最小并发:BestAvailableRule
- 过滤:AvailabilityFilteringRule
- 响应时间:WeighedResponseTimeRule
- 轮询重拾:RetryRule
- 性能可用性:ZoneAvoidanceRule
设置负载均衡策略:1. 编码。2. 配置。(在消费者客户端进行配置)
2.2.1 编码设置策略
设置配置类RuleConfig:
@Configuration
public class RuleConfig{
@Bean
public IRule rule(){
return new RandomRule();//此处new对应的策略即可。
}
}
编写启动类:增加注解:@RibbonClient(name=”服务提供方的应用名称”,configuration=RuleConfig.class)
2.2.2 配置设置策略
在application.yml中进行配置: