目录
一、ribbon介绍
1.1.负载均衡
负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行
1.2.ribbon
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端(consumer)负载均衡的工具。提供了很多负载均衡策略:轮询、随机等
使用时不需要去引入ribbon的依赖,因为在nacos里面已经集成了ribbon的依赖
二、ribbon入门
1、开启ribbon负载均衡
@LoadBalanced //开启负载均衡
@Configuration
public class ConfigBean {
@Bean
/**
* 添加了@LoadBalanced注解之后,Ribbon会给restTemplate请求添加一个拦截器,在拦截器中获取
* 注册中心的所有可用服务,通过获取到的服务信息(ip,port)替换 serviceId 实现负载请求。
*/
@LoadBalanced //开启负载均衡
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
2、指定负载均衡策略
@Configuration
public class ConfigBean {
@Bean
@LoadBalanced //开启负载均衡
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
//随机策略
@Bean
public IRule iRule() {
return new RandomRule();
}
}
2.1.策略类型
2.1.1.随机策略
com.netflix.loadbalancer.RandomRule
:该策略实现了从服务清单中随机选择一个服务实例的功能。
//随机策略
@Bean
public IRule iRule() {
return new RandomRule();
}
2.1.2. 轮询策略
com.netflix.loadbalancer.RoundRobinRule
:该策略实现按照线性轮询的方式依次选择实例的功能。具体实现如下,在循环中增加了一个count计数变量,该变量会在每次轮询之后累加并求余服务总数
//轮询策略
@Bean
public IRule iRule(){
return new RoundRobinRule();
}
3、controller发送服务请求
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
//访问Rest服务的客户端
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
//使用ribbon:不再使用ip:port的方式,而是改成了serviceId(即Nacos中注册的服务名称)
String serviceUrl = "ribbon-provider";
//调用服务
String url = "http://" + serviceUrl + "/provider/getUserById/"+id;
return restTemplate.getForObject(url, User.class);
}
}