SpringCloud微服务 之Ribbon(二-Customize)
前言
上一节中我们学习了如何使用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。
还没有评论,来说两句吧...