它主要提供负载均衡的能力,在Spring Cloud 中,使用最多的是将RestTemplate和Ribbon相结合,Feign中默认使用Ribbon。
一、基础应用
消费者整合Ribbon
1.为项目引用Ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
- 结和RestTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力
- 测试
启动提供者服务,服务名provider-user,端口分别为9004和9005。
代码如下:
@Resource
private RestTemplate restTemplate;
@Resource
private LoadBalancerClient loadBalancerClient;
@PostMapping("/")
public String find() {
ServiceInstance serviceInstance = this.loadBalancerClient.choose("provider-user");
return serviceInstance.getServiceId() + " " + serviceInstance.getHost() + " ";
}
多次请求结果如下:
provider-user xxx 9005
provider-user xxx 9004
provider-user xxx 9004
provider-user xxx 9005
provider-user xxx 9004
provider-user xxx 9005
provider-user xxx 9005
说明已经实现负载均衡
Ribbon配置
- 比如修改Ribbon负载均衡的规则
@Configuration
public class RibbonConfing {
@Bean
public IRule RibbonRule() {
// 轮询
return new RoundRobinRule();
// 随机
return new RandomRule();
}
}
还有种方式是属性配置
provider-user:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
两种效果一样,可以根据实际情况使用。
Ribbon的github:https://github.com/Netflix/ribbon