SpringCloud Ribbon是一个基于http和tcp的客户端负载均衡工具,通过对spring cloud的封装,可以让我们轻松的将面向服务的REST模板请求自动转换为客户端负载均衡的服务调用。
负载均衡在系统架构中是一个非常重要,并且是不得不去实施的内容,负载均衡对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一,负载均衡有硬件的负载均衡设备,比如F5,软件的负载均衡是通过在服务器上安装一些具有均衡负载功能或模板的软件来完成请求分发工作,比如:Nginx,不管是硬件还是软件的负载均衡,只要是服务端负载均衡都能以这样下图的架构方式构建:
通过SpringCloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用非常简单,只需要如下两步:
- 服务提供者只需要启动个多服务实例并注册到一个注册中心或多个相关的服务注册中心
- 服务消费者直接调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。
启动类:
@Bean
@LoadBalanced
//负载均衡
RestTemplate restTemplate(){
return new RestTemplate();
}
service层
@Autowired
RestTemplate restTemplate;
public String helloService(){
return restTemplate.getForEntity("http://HELLO-SERVICE/pro",String.class).getBody();
}
controller层:
@RestController
public class consumerController {
@Autowired
HelloService helloService;
@RequestMapping(value = "/ribbon-consumer", method = RequestMethod.GET)
public String helloConsumer() {
return helloService.helloService();
}
}
RestTemplate简单概述:
RestTemplate会使用Ribbon的自动化配置,同时通过配置@LoadBalanced还能开启客户端负载均衡,比如:
@Bean
@LoadBalanced
//负载均衡
RestTemplate restTemplate(){
return new RestTemplate();
}
在RestTemplate中,对GET请求可以通过以下方式进行调用实现。
一:getForEntity函数。改方法返回的是一个ResponseEntity对象,该对象是spring对HTTP请求响应的封装,其中主要存储了HTTP的几个重要的元素,比如HttpStatus(404,500这些错误码)。