SpringCloud微服务 之Ribbon(二-Customize)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012437781/article/details/82990229

前言

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

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

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

案例

  • Eureka Server端编写:((参考前例))

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

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

    • CoreCode

      @Configuration
      public class RibbonConfig {
      	
      	@Autowired
      	IClientConfig config;
      	
      	@Bean
      	public IRule ribbonRule(IClientConfig config) {
      		return new RandomRule();
      	}
      }
      
      
      @SpringBootApplication
      @EnableDiscoveryClient
      @RibbonClients(value = {
      		@RibbonClient(name = "microservice-deal-cloud", configuration = RibbonConfig.class)
      })  //可以添加多个自定义@RibbonClient用于对不同的服务做不同成都的负责均衡策略
      
      public class MicroserviceDealBrokerRibbonCustomizedApplication {
      
      	@Bean
      	@LoadBalanced
      	/**
      	 * 添加 @LoadBalanced 使该RestTemplate具备Ribbon均衡负载算法功能
      	 * @return
      	 */
      	public RestTemplate restTemplate() {
      		return new RestTemplate();
      	}
      
      	public static void main(String[] args) {
      		SpringApplication.run(MicroserviceDealBrokerRibbonCustomizedApplication.class, args);
      	}
      }
      
  • 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。

猜你喜欢

转载自blog.csdn.net/u012437781/article/details/82990229