spring cloud 之负责均衡第二篇

一.接着上篇文章《spring cloud 之负载均衡(restTemplate)》说起,当我们使用@LoadBalanced逐渐对集群的服务进行处理时,挂调某一个服务时,还会出现去轮询的方式调用,导致两个服务有一个好用,另外一个不好用的情况。

1.当我们对集群来处理某个服务的时候,中间某个服务出现异常,因为负载均衡采用轮询的算法会出现某个服务好用,某个服务不好用的情况,从现象来进行分析:此时Eureka注册中心中就算某个服务挂了,它无法立马感知服务已经挂掉,所以我们去轮询服务的时候,会发生服务有时候是好用,有时候不好用。这个机制会过一定的时间Eureka才会把服务进行剔除,那么如果我们在处理中要想尽可能的保证服务可用,怎么办?,可以更改轮询策略。
2.LoadBalanced 轮询策略有如下:


spring cloud 之负责均衡第二篇_第1张图片
image.png

通过上面的轮询策略可以知道,我们想解决上面的问题,可以通过更改权重的策略,或者ping的策略。
具体实现,特别简单,如下:新增一个RibbonConfig

@Configuration
public class RibbonConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

//    @Bean
//    public IRule ribbonRule(){
//        return new RandomRule();
//    }
    @Bean
    public IRule ribbonRule(){
        return new WeightedResponseTimeRule();
    }
}

使用方式:在服务启动类中增加RibbonConfig注解。

@SpringBootApplication
@EnableEurekaClient
@ComponentScan(basePackages = "com.itshirui")
@RibbonClient(name = "ribbonclient",configuration = RibbonConfig.class)
public class ServiceOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceOrderApplication.class, args);
    }
}

测试效果会发现,最开始我们请求到错误的请求时会多,慢慢的当我们服务请求次数多了后,正确的连接会比较多了。

你可能感兴趣的:(spring cloud 之负责均衡第二篇)