一.接着上篇文章《spring cloud 之负载均衡(restTemplate)》说起,当我们使用@LoadBalanced逐渐对集群的服务进行处理时,挂调某一个服务时,还会出现去轮询的方式调用,导致两个服务有一个好用,另外一个不好用的情况。
1.当我们对集群来处理某个服务的时候,中间某个服务出现异常,因为负载均衡采用轮询的算法会出现某个服务好用,某个服务不好用的情况,从现象来进行分析:此时Eureka注册中心中就算某个服务挂了,它无法立马感知服务已经挂掉,所以我们去轮询服务的时候,会发生服务有时候是好用,有时候不好用。这个机制会过一定的时间Eureka才会把服务进行剔除,那么如果我们在处理中要想尽可能的保证服务可用,怎么办?,可以更改轮询策略。
2.LoadBalanced 轮询策略有如下:
通过上面的轮询策略可以知道,我们想解决上面的问题,可以通过更改权重的策略,或者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);
}
}
测试效果会发现,最开始我们请求到错误的请求时会多,慢慢的当我们服务请求次数多了后,正确的连接会比较多了。