ribbon简介

  1. RibbonNetflix发布的负载均衡器,它有助于控制HTTPTCP客户端的行为。
  2. Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。
  3. Ribbon默认为我们提供了很多的负载均衡算法,例如:轮询,随机等,也可自定义;
  4. 简单的说,就是在配置文件中列出负载均衡后面所有的机器,Ribbon会自动的帮你基于某种规则
  5. (如:简单的轮询、随机连接等)去连接这些机器
  6. 而在SpringCloud中使用RibbonEureka时,Ribbon会自动从EurekaServer中获取服务提供者地址列表,
  7. 并基于负载均衡算法。

默认负载均衡算法

image.png

ribbon整合

  1. 1.启动EurekaServer
  2. 2.provider项目,启动2个实例,也就相当于集群(修改端口启动即可,80899090端口)
  3. (idea启动2个实例:Edit编辑启动选项,勾选Allow parallel run)
  4. 3.customer项目进行配置:
  5. (1)启动类(给RestTemplate加上@LoadBalanced注解)
  6. 加入@LoadBalanced注解,就可以为RestTemplate加入负载均衡的能力
  7. @Bean
  8. @LoadBalanced
  9. public RestTemplate getTemplate(){
  10. return new RestTemplate();
  11. }
  12. 4.编写测试Controller
  13. @GetMapping("/testribbon")
  14. public String ribbon(){
  15. //查找对应服务实例,会通过负载均衡的算法返回
  16. ServiceInstance choose = loadBalancerClient.choose("provider");
  17. System.out.println("负载均衡 -> "+choose.getServiceId()+":"+choose.getHost()+":"+choose.getPort());
  18. return choose.getServiceId() + ":" + choose.getHost() + ":" + choose.getPort();
  19. }
  20. //访问:http://localhost:9092/testribbon输出内容
  21. 负载均衡 -> provider:localhost:9090
  22. 负载均衡 -> provider:localhost:8089
  23. 负载均衡 -> provider:localhost:9090
  24. 负载均衡 -> provider:localhost:8089
  25. 负载均衡 -> provider:localhost:9090

自定义ribbon负载均衡算法

  1. 1.启动类加入注解,指定服务名和配置类
  2. //用于配置功能区客户端
  3. @RibbonClient(name = "provider",configuration= MyRibbonRule.class)
  4. 2.配置类应注意:
  5. MyRibbonRule.class必须是@Configuration,但请注意,它不在主应用程序上下文的@ComponentScan中,
  6. 否则将由所有@RibbonClients共享。如果您使用@ComponentScan(或@SpringBootApplication),
  7. 则需要采取措施避免包含(例如将其放在一个单独的,不重叠的包中,或者指定要在@ComponentScan)。
  8. 也就是不要被扫描到,新建一个外层的包存放。
  9. @Configuration
  10. public class MyRibbonRule {
  11. @Bean
  12. public IRule muRule() {
  13. return new RandomRule();// 随机
  14. }
  15. }
  16. 3.如果以上方法看着不舒服,可采用配置文件的方式来实现
  17. 去除@RibbonClient注解
  18. application.yml文件添加:
  19. provider: # 服务名
  20. ribbon:
  21. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 算法

禁用ribbon

  1. application.yml配置文件中添加:
  2. ribbon:
  3. eureka:
  4. enabled: false