ribbon和eureka都是来自同一个公司,导入eureka坐标之后不需要再导入ribbon的坐标了。ribbon是客户端负载均衡工具。

服务端负载均衡:负载均衡算法在服务端,由负载均衡器维护服务地址列表。
客户端负载均衡:负载均衡在客户端,客户端维护服务地址列表。

一. Ribbon远程调用


1.1 简化RestTemplate远程调用步骤

使用步骤:

  1. RestTemplateConfig类下面的@bean注解上再加一个@LoadBalanced。
  2. 在使用RestTemplate发起远程请求的,需要定义url时,host:port可以替换为 服务提供方 的应用名称。

    1.2 代码演示

    1. /**
    2. * 服务的调用方
    3. */
    4. @RestController
    5. @RequestMapping("/order")
    6. public class OrderController {
    7. @Autowired
    8. private RestTemplate restTemplate;
    9. @GetMapping("/goods/{id}")
    10. public Goods findGoodsById(@PathVariable("id") int id){
    11. String url = "http://服务提供方的应用名称/goods/findOne/"+id;
    12. // 3. 调用方法
    13. Goods goods = restTemplate.getForObject(url, Goods.class);
    14. return goods;
    15. }
    16. }

    注意:到此为止并不是最终解决方案。

二. Ribbon负载均衡


2.1 负载均衡演示

  1. 启动两个以上的eureka提供者(同一个提供者)。
  2. ribbon默认集成负载均衡,直接可以使用消费者consumer进行访问即可。

默认情况下,ribbon的负载军均衡策略是轮询(即一个服务请求一次)。

2.2 负载均衡策略

  1. 随机:RandomRule
  2. 轮询:RoundRobinRule
  3. 最小并发:BestAvailableRule
  4. 过滤:AvailabilityFilteringRule
  5. 响应时间:WeighedResponseTimeRule
  6. 轮询重拾:RetryRule
  7. 性能可用性:ZoneAvoidanceRule

设置负载均衡策略:1. 编码。2. 配置。(在消费者客户端进行配置)

2.2.1 编码设置策略

设置配置类RuleConfig:

  1. @Configuration
  2. public class RuleConfig{
  3. @Bean
  4. public IRule rule(){
  5. return new RandomRule();//此处new对应的策略即可。
  6. }
  7. }

编写启动类:增加注解:@RibbonClient(name=”服务提供方的应用名称”,configuration=RuleConfig.class)

2.2.2 配置设置策略

在application.yml中进行配置:
image.png