springcloud使用ribbon做负载均衡


前言

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值