通过上篇我们知道Ribbon默认的是轮询,但是这个有个不好地方就是如果轮询的那个服务正好断开,就请求不到了,所有给大家价绍一下几种轮询
如何使用这个负载分配,很简单,在客服端80项目的ConfigBena配置里面注入你需要的分配方式。
public class ConfigBena {
@Bean
@LoadBalanced //因为请求都是通过RestTemplate进行请求,所以加上这个注解可以实现负载均衡(默认的是轮询,但是轮询到哪个服务终端就会执行不力,这个方式不好)
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean //随即轮询
public IRule myRule(){
return new RandomRule();
}
}
然后你可以去浏览器体验下请求的服务端到底是什么(根据数据库的dbname字段看)
接下来看看如何自定义的分配算法
*首先我们修改下
上面的自定义的负载配置。我们应该单独建立一个包专门写上配置类,关键看下myRule的包位置和constumer是同一级的
MyRules的代码
@Configuration
public class MyRules {
@Bean //随即轮询
public IRule myRule(){
return new RandomRule();
}
}
写完这个类我们要把他加入启动类,主要看增加@RibbonClient这个注解
@SpringBootApplication
@MapperScan("constumer")
@EnableEurekaClient
//下面的一句话意思就是说在该服务器启动滚动时候就能吧我们自定义的负载配置加载进来
@RibbonClient(name ="SPRINGCLOUDS-PROVIDERS-8001",configuration = MyRules.class)
public class ApplicationConsturmer80 {
public static void main(String[] args) {
SpringApplication.run(ApplicationConsturmer80.class);
}
}