ribbon和eureka都是来自同一个公司,导入eureka坐标之后不需要再导入ribbon的坐标了。ribbon是客户端负载均衡工具。
服务端负载均衡:负载均衡算法在服务端,由负载均衡器维护服务地址列表。
客户端负载均衡:负载均衡在客户端,客户端维护服务地址列表。
一. Ribbon远程调用
1.1 简化RestTemplate远程调用步骤
使用步骤:
- RestTemplateConfig类下面的@bean注解上再加一个@LoadBalanced。
在使用RestTemplate发起远程请求的,需要定义url时,host:port可以替换为 服务提供方 的应用名称。
1.2 代码演示
/*** 服务的调用方*/@RestController@RequestMapping("/order")public class OrderController {@Autowiredprivate 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:
@Configurationpublic class RuleConfig{@Beanpublic IRule rule(){return new RandomRule();//此处new对应的策略即可。}}
编写启动类:增加注解:@RibbonClient(name=”服务提供方的应用名称”,configuration=RuleConfig.class)
2.2.2 配置设置策略
在application.yml中进行配置:
