Spring Cloud Ribbon封装了Netflix Ribbon,是基于HTTP和TCP的客户端负载均衡器。 它主要包括六个组件:
- ServerList:负载均衡使用的服务器列表。
 - ServerListFilter:服务器列表过滤器。
 - IPing:探测服务实例是否存活的策略。
 - IRule:负载均衡策略,轮询、随机、根据响应时间加权等。
 - ILoadBalancer:负载均衡器。
 - RestClient:服务调用器。
 
Ribbon工作时会做四件事情:
- 优先选择在同一个Zone且负载较少的Eureka Server;
 - 定期从Eureka更新并过滤服务实例列表;
 - 根据用户指定的策略,在从Server取到的服务注册列表中选择一个实例的地址;
 - 通过RestClient进行服务调用。
 
服务消费
- pom依赖
 
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
- application.properties配置
 
spring.application.name=ribbon-consumer
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/
- 注解@EnableDiscoveryClient开启eureka-client
 - 注解@LoadBalanced开启客户端负载均衡;直接通过RestTemplate发起请求。
 
@RestController
public class DcController {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/consumer")
    public String dc() {
        return restTemplate.getForObject("http://eureka-client/dc", String.class);
    }
}
host是服务名。Ribbon的拦截器,能在调用时,根据服务名自动选取服务实例,以实际请求的IP地址和端口替换,从而完成服务接口的调用。 5. 主要参数配置
# 负载均衡类,默认为om.netflix.loadbalancer.ZoneAwareLoadBalance
<clientName>.<nameSpace>.NFLoadBalancerClassName=xx
# 负载均衡规则类,默认为com.netflix.loadbalancer.AvailabilityFilteringRule
<clientName>.<nameSpace>.NFLoadBalancerRuleClassName=xx
# 心跳检测类,默认为com.netflix.loadbalancer.DummyPing
<clientName>.<nameSpace>.NFLoadBalancerPingClassName=xx
# 服务列表类,默认为com.netflix.loadbalancer.ConfigurationBasedServerList,结合eureka使用时默认为com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
<clientName>.<nameSpace>.NIWSServerListClassName=xx
# 服务过滤类,默认为com.netflix.loadbalancer.ZoneAffinityServerListFilter。结合spring cloud eureka使用时默认为org.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter
<clientName>.<nameSpace>.NIWSServerListFilterClassName=xx