负载均衡的目的是减少同一时间对同一个提供者的请求次数。在高并发高可用的情况下,很容易造成请求雪崩,直接把服务挂掉,为了防止这一情概况的发生,我们使用负载均衡来处理。
使用方式很简单,在Ribbon和Eureka集成后,创建多个用来接收请求的提供者,并注册到Eureka中,注意,这里注册的时候,一定要保证自定义的Spring.appication.name内容一致。注意是所有的提供者的名字都要使用。然后注册Eureka时添加
instance:
instance-id: springcloud-provider-8001
进行区分 这样处理后在消费者添加进行均衡操作的注解。
@LoadBalance 添加到
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
RestTemplate用来获取提供者的暴露接口。不需要关心提供者的内部流程,直接调用接口就可以。
在配置类中配置完成后进行controller的操作
@RestController
public class ConsumerDeptController {
@Autowired
RestTemplate restTemplate;
// 负载均衡放到rest中 获取的东西应该是从eureka中 Eureka中不止是8001端口提供服务,还有8002,所以使用服务名字来获取接口内容,Eureka和Ribbon会自动帮你判定使用的是8001还是8002
// private static final String REST_URL_PREFIX="http://localhost:8001";
private static final String REST_URL_PREFIX="http://SPRINGCLOUD-PROVIDER";
@RequestMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Integer id){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
}
@RequestMapping("/consumer/dept/get")
public List<Dept> getAll(){
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get",List.class);
}
@RequestMapping("/consumer/dept/add")
public Boolean addDept(Dept dept){
return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);
}
}