一、Ribbon 简介
- 负载均衡是一个算法,可以用过该算法实现从服务地址列表中获取一个地址进行服务调用。spring cloud 中提供了Ribbon
Ribbon是Netflix发布的一个负载均衡器,有助于控制http和tcp客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon可基于负载均衡算法自动帮助服务消费者去请求。Ribbon提供了多种负载均衡算法。如轮询 随机等。也可以自定义负载均衡算法。
二、Ribbon应用
实例化RestTemplate是添加注解 @LoadBalanced
/**
* Ribbon :在执行restTemplate发送服务地址请求时,使用负载均衡拦截器,根据服务名获取服务地址列表。使用Ribbon负载均衡算法
* 选择已和服务地址。并访问改地址。
* 步骤:
* 1、启动多个生产者实例
* 2、修改RestTemplate 添加负载均衡注解 @LoadBalanced
* 启动是spring_cloud-commons.jar 中的 META-INF/spring.factories中LoadBalancerAutoConfiguration
* LoadBalancerInterceptorConfig负载均衡拦截器 默认是轮询算法
*/
1 @Bean 2 @LoadBalanced 3 public RestTemplate restTemplate(){ 4 return new RestTemplate(); 5 }
源码跟踪
显然是有组件根据service名称,获取到了服务实例的ip和端口。因为consumer-demo使用的是RestTemplate,spring的负载均衡自动配置类LoadBalancerAutoConfiguration.
LoadBalancerInterceptorconfig会自动配置负载均衡拦截器(在spring-cloud-commons-*.jar包中的spring.factories中定义的自动配置类),它就是
LoadBalancerInterceptor,这个类会在对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。