#Ribbon负载均衡
Ribbon简介
Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它不像服务注册中心、配置中心、API网关那样独立部署,但是它几乎存在于每个微服务的基础设施中。包括前面的提供的声明式服务调用也是基于该Ribbon实现的。理解Ribbon对于我们使用Spring Cloud来讲非常的重要,因为负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。在上节的例子中,我们采用了声明式的方式来实现负载均衡。实际上,内部调用维护了一个RestTemplate对象,该对象会使用Ribbon的自动化配置,同时通过@LoadBalanced开启客户端负载均衡。其实RestTemplate是Spring自己提供的对象,不是新的内容。读者不知道RestTemplate可以查看相关的文档。
哪里需要在多个服务中进行选择哪里就需要负载均衡
使用
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId></dependency>
修改配置类(通常是启动类)
在有RestTemplate的地方添加注解@LoadBalance(有RestTemplate的地方通常需要在多个服务中进行选择)
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
示例,消费者者controller负载均衡
使用起来很简单
@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("{id}")
public User queryForObjects(@PathVariable("id")Integer id) {
//加入负载均衡 只需将主机名部分换成服务即可,通过拦截器实现
String url = "http://user-service/user/"+id;
System.out.println(url);
User user = restTemplate.getForObject(url, User.class);
return user;
}
}
负载均衡规则简介
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
![屏幕快照 2018-11-20 下午5.44.12](Spring-Cloud之Ribbon负载均衡入门/屏幕快照 2018-11-20 下午5.44.12.png)