一、微服务负载均衡ribbon策略如下:
1、线性轮询策略: RoundRibbonRule
2、重试策略:RetryRule
3、加权响应时间策略:WeightedResponseTimeRule
4、随机策略:RandomRule
5、最空闲策略:BestAvailableRule
6、区域感知轮询策略:ZoneAvoidanceRule(默认)
每个策略对应什么意思,基本也就是字面所示,默认策略是区域,如果没有区域,那就是轮询策略
二、那如何修改默认的策略
有两种方法:1、使用配置类;2、使用配置文件配置
方法一:使用配置类:
每个轮训策略的父类都是IRule(里面的核心方法就是choose,用来选择服务实例),我们只需要实现它重新定义轮训策略即可
①新建配置类
@Configuration public class RibbonRandomRuleConfig { @Bean public IRule iRule(){ return new RandomRule(); } }
有两个注意点:1、方法需要返回IRule这个对象,并且方法名必须是iRule;2、该配置类的不能和启动类所在@SpringBootApplication同级别(主要是有@ComponentScan),这个是源码里面扫描的时候,如果和@ComponentScan同级,那就会让所有的服务提供方都共享这个负载均衡策略,即使别的服务配置了不同的轮训策略依旧会失效。
2、在启动类上配置扫描
配置完成,去测试下就可以看下效果。如果想换轮训策略,只需要在返回的config配置类里面返回对应的策略即可,如下为IRule策略
方法二:使用配置文件配置
在消费端(order-ribbon)的application.yml里面配置如下ribbon配置,注意这个stock-service是服务提供方
stock-service: 服务提供方 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule 策略所在包路径
这里配置的是nacos权重策略,这里是包的完整路径
如果是直接随机或者轮训的策略,那到此为止了,那这个是基于nacos的权重策略的,所以需要去nacos里面配置下实例的权重,如下
这IRule有个接口AbstractLoadBalancerRule是辅助IRule负载均衡策略选取适合的服务端可用实例,简单理解就是可能服务端有多种类型的,而这个接口就能找到你要的那个服务端实例,比如此处要的就是stock-service这个名称的服务端实例,而不是别的,order-stock里面的application.yml里面的stock-service也是注明要这类的服务端实例。
到此,这使用ribbon组件两种方式就已经完成,可自行选择
以上内容仅学习使用!
标签:策略,springcloud,配置,IRule,服务端,组件,ribbon,轮训 From: https://www.cnblogs.com/qwg-/p/18420283