SpringCloud微服务 之Ribbon(二-Customize)

淩亂°似流年 2022-05-08 07:06 351阅读 0赞

前言

上一节中我们学习了如何使用Ribbon做服务实例的负载均衡,并演示了使用Ribbon默认的轮询策略实现了Eureka服务负载均衡。本节学习一些如何自定义Ribbon的负载均衡策略。

在微服务的一些场景中我们可能会遇到如下需求:A服务消费B服务时我们需要使用Ribbon的轮询策略来实现负载均衡,当A消费C服务时我们需要使用Ribbon的随机策略来实现负载均衡,当A消费D服务时我们需要使用Ribbon的IPPrefer策略来实现均衡负载…。即A服务消费不同的服务时使用的均衡负载策略是不一样的,我们知道Ribbon默认使用的负载均衡策略是轮询,此时我们就需要自定义不同负载均衡策略来满足不同的业务需求。

  • Ribbon提供的负载均衡策略:
    在这里插入图片描述

案例

  • Eureka Server端编写:((参考前例))
  • Eureka Client端服务提供方编写(参考前例)

    • 项目结构
      在这里插入图片描述
    • CoreCode

      1. @Configuration
      2. public class RibbonConfig {
      3. @Autowired
      4. IClientConfig config;
      5. @Bean
      6. public IRule ribbonRule(IClientConfig config) {
      7. return new RandomRule();
      8. }
      9. }
      10. @SpringBootApplication
      11. @EnableDiscoveryClient
      12. @RibbonClients(value = {
      13. @RibbonClient(name = "microservice-deal-cloud", configuration = RibbonConfig.class)
      14. }) //可以添加多个自定义@RibbonClient用于对不同的服务做不同成都的负责均衡策略
      15. public class MicroserviceDealBrokerRibbonCustomizedApplication {
      16. @Bean
      17. @LoadBalanced
      18. /**
      19. * 添加 @LoadBalanced 使该RestTemplate具备Ribbon均衡负载算法功能
      20. * @return
      21. */
      22. public RestTemplate restTemplate() {
      23. return new RestTemplate();
      24. }
      25. public static void main(String[] args) {
      26. SpringApplication.run(MicroserviceDealBrokerRibbonCustomizedApplication.class, args);
      27. }
      28. }
  • Eureka Client端服务提消费编写(多实例) 在多个端口启动多个实例 (参考前例)
    开启3个实例(8081、8083、8084)
  • Eureka DashBoard
    在这里插入图片描述
  • 持续访问:http://localhost:8082/deal/2
    Ribbon会使用随机策略随机定位到不同的实例:
    图片静态展示无说服力就不贴图了 - -!。

小结

  • 自定义Ribbon的负载均衡策略时需要特别注意一下几点:

    • Ribbon默认的负载均衡策略时轮询策略。
    • 自定义Ribbon负载均衡策略时配置类不能与主类同包,否则RibbonClient会覆盖所有自定义策略,如本案例所示将主类与配置类分开。
    • 使用@RibbonClients可以实现对不同服务节点使用不同的负载均衡策略,如本案例主类注解所示。
    • 可以在配置文件中设置Ribbon的负载均衡策略:ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
      使用这种方式配置的是全局负载均衡策略,无法实现对不同节点使用不同负载均衡策略,慎用!!!
    • RibbonClient负载均衡父类:org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration。
    • 用到的案例:microservice-deal-eureka、microservice-deal-cloud、microservice-deal-broker-cloud-ribbon-customized。

发表评论

表情:
评论列表 (有 0 条评论,351人围观)

还没有评论,来说两句吧...

相关阅读