文章目录
前言
springcloud中面对集群的时候就不得不考虑用负载均衡减低服务器压力了。新版的eureka中集成了ribbon的负载均衡,需要在pom文件中导入下面包
客户端:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
服务端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
如果用的eureka不是上面的依赖的话就用下面这个
<!--做负载均衡用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-ribbon</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
一、Ribbon负载规则
ribbon负载均衡的核心是irule接口,在接口下实现了AbstractLoadBalancerRule抽象类,又在抽象类上分别实现了RoundRibbonRule(轮询)、RandomRule(随机)、RetryRule(重试)、BestAvailableRule(最低并发)、AvailabilityFilteringRule(可用过滤)、WeightedResponseTimeRule(应时间加权重)、ClientConfigEnabledRoundRobinRule(自定义策略)几个策略实现类。默认规则是使用轮询策略。
1.RoundRobinRule 轮询策略
此策略是Ribbon的默认策略,是按照顺序,依次对所有的user服务进行访问
2.RandomRule 随机策略
就和这个策略的名字一样,是对user的服务的随机调用,所以不存在规律
3.WeightedResponseTimeRule 响应时间加权重策略
根据user的服务的响应时间来分配权重,响应时间越长的服务,权重越低,那么被调用的概率也就越低。相反,响应时间越短的服务,权重越高,被调用的概率也就越高
4.RetryRule 重试策略
重试策略是指通过轮询策略选出一个实例,然后去访问,如果此实例为null或者已经失效,那么会重试其他的实例
5.BestAvailableRule 最低并发策略
会根据每个服务实例的并发数量来决定,访问并发数最少的那个服务
6.AvailabilityFilteringRule 可用过滤策略
此策略会聪明的过滤掉一直失败并被标记为circuit tripped的服务,而且会过滤掉那些高并发的服务
7.ClientConfigEnabledRoundRobinRule 自定义策略
重置LoadBalancer来达到自定义一些高级策略的目的,需要自己写策略代码
二、修改默认的负载策略实例
1.新建自定义配置类
由于官方文档给出自定义配置类不能放在@ComponentScan所扫描的包以及子包下,所以我们需要自己再新建一个包。什么意思呢?
在主启动类中通常有添加@SpringcBootApplication这个注解,我们点击进去
这里就有@ComponentScan这个注解用来扫描主启动类所在的包下的所有包。例如,我们通常会建立一个包为com.xxx.xxx然后在这个包下面放entity,controller等等子包,那么修改的负载均衡的代码就不能放在这个包下。需要新建一个包
像这样就可以分开了,ribbonrule用来放修改的负载均衡类。
我使用了响应时间加权重策略。
@Configuration
public class MyRibbonRule {
@Bean
public IRule myRule(){
return new WeightedResponseTimeRule();
}
}
2.主启动类加注解
@RibbonClient(name = "cloud-payment-service",configuration = MyRibbonRule.class)