04.Ribbon负载均衡
SpringCloud Ribbon是基于Netfilx Ribbon实现的服务器负载均衡工具。
Ribbon的
客户端组件提供完整的配置项目,如连接超时、重试等。在配置文件中列出LoadBalancer(LB)后面的所有机器,Ribbon会自动帮你进行基于某种规则(随机,轮询,权重)连接这些机器,从而实现Ribbon进行负载均衡。
- 集中式负载均衡
在消费者和提供者之间使用独立的负载均衡设备例如Nginx,该设备将访问通过某种策略转发至访问的提供方。
- 进程式负载均衡
将负载均衡集成到消费方,消费方从注册中心中获取那些提供者可以使用,自己选择合适自己的服务器。
导入Maven依赖
在新版的eureka-client中,已经集成包含了Ribbon,所以我们不需要进行对Ribbon的依赖导入。
<!--Eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.1.4</version>
</dependency>
编写配置文件
进行对Eureka的配置编写。
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://yume7001.com:7001/eureka,http://yume7002.com:7002/eureka,http://yume7003.com:7003/eureka
编写ConfigBean文件
添加@LoadBalanced注解,即可进行负载均衡。
@Configuration
public class ConfigBean {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
修改Controller文件
我们将原来的固定路径进行修改。
private static final String REST_URL = "http://localhost:8001";
将其更新为我们需要使用的服务名称。
@Controller
public class BirdConsumer {
@Resource
private RestTemplate restTemplate;
private static final String REST_URL = "http://springcloud-provider-bird";
@ResponseBody
@RequestMapping("/consumer/bird/query")
public List<Bird> getAllBird(){
return restTemplate.getForObject(REST_URL+"/bird/query",List.class);
}
@ResponseBody
@RequestMapping("/consumer/bird/query/{id}")
public Bird getBird(@PathVariable("id")int id){
return restTemplate.getForObject(REST_URL+"/bird/query/"+id,Bird.class);
}
}