1、Ribbon简介
Ribbon是Netflix发布的负载均衡器,配合Eureka使用时,可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例
2、使用Demo
1)引入Ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
注:1)与Eureka配合使用时,spring-cloud-starter-eureka中已经包含了spring-cloud-starter-ribbon
2)添加@LoadBalanced注解
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class MovieConfiguration {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/user/{id}")
public User findById(@PathVariable Long id) {
return restTemplate.getForObject("http://user/" + id, User.class);
}
}
3、使用Java代码自定义Ribbon配置
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule() {
// 负载均衡规则,改为随机
return new RandomRule();
}
}
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Configuration;
@Configuration
@RibbonClient(name = "user", configuration = RibbonConfiguration.class)
public class TestRibbonConfiguration {
}
注:1)user为服务提供者在Eureka中的名称
2)RibbonConfiguration该类不能在应用程序上下文的@ComponentScan中,否则会在全局生效(不同的服务我们可能会需要差异化的配置)
3)可配置项有:IClientConfig、IRule、IPing、ServerList、ServerListFilter、ILoadBalancer
4、使用配置文件自定义Ribbon配置
# 指定user服务的负载均衡策略采用随机策略
user:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRulew
application.yml中添加上述配置,其中user为服务名(做到了服务配置隔离),配置项有:
1)NFLoadBalancerClassName:配置ILoadBalancer的实现类
2)NFLoadBalancerRuleClassName:配置IRule的实现类
3)NFLoadBalancerPingClassName:配置IPing的实现类
4)NIWSServerListClassName:配置ServerList的实现类
5)NIWSServerListFilterClassName:配置ServerListFilter的实现类