Ribbon的作用
Ribbon是springcloud下的客户端负载均衡器,消费者在通过服务别名调用服务时,需要通过Ribbon做负载均衡获取实际的服务调用地址,然后通过httpclient的方式进行本地RPC远程调用。
Ribbon原理
Ribbon负载均衡主要是轮询算法,分为以下几步:
1.根据服务别名,从eureka获取服务提供者的客户端列表
2.将列表缓存到本地,即消费者客户端的jvm中
3.获取提供者客户端下标(总请求数%服务提供者数),得到调用的服务客户端的实际地址
与Nginx的区别
Nginx是用于服务器的,主要是统一将外部客户端(浏览器)的请求,通过负载均衡算法分发到具体的应用服务器。
Ribbon是应用于微服务框架下的,在客户端(服务消费者)通过负载均衡算法获取服务提供者的客户端地址,称之为客户端负载均衡器。
Ribbon对RestTemplate的支持
消费者调用服务目前主要有两种方式,通过RestTemplate和Feign,Feign默认就开启Ribbon,不需要额外的设置,RestTemplate需要@LoadBalanced注解开启Ribbon。
RestTemplate
一般RestTemplate是作为bean注入到Spring容器,通过@LoadBalanced注解开启Ribbon服务,并使用服务别名的方式进行调用即可,不需要指定服务提供者的具体地址。
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
@RequestMapping("/getHi")
public String getHi(){
return restTemplate.getForObject("http://eureka-client/hi",String.class);
}
关键参数
ReadTimeout -- 建立连接的超时设置
ConnectTimeout -- 建立连接后获取可用资源的超时设置