Spring Cloud 负载均衡 - Ribbon
Spring Cloud 负载均衡 - Ribbon
4.1-Ribbon概述
Ribbon是Netflix提供的一个基于HTTP和TCP的客户端负载均衡工具。
-
主要作用
1、简化远程调用
2、负载均衡
-
服务端负载均衡
负载均衡算法在服务器
由负载均衡器维护服务地址列表
-
客户端负载均衡
负载均衡算法在客户端
客户端维护服务地址列表
-
4.2-Ribbon简化远程调用
Ribbon可以与简化RestTemplate的远程调用。
实现步骤1-在consumer项目RestTemplateConfig中新增@LoadBalanced注解:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
实现步骤2-在consumer项目OrderController中新增findGoodsById2方法:
/*
* 使用Ribbon简化RestTemplate远程调用
* 1、在声明restTemplate的bean时候,添加@LoadBalanced注解
* 2、在使用restTemplate发起请求时,需要定义url时,host:port可以替换成"应用名称"
* */
@GetMapping("/goods2/{id}")
public Goods findGoodsById2(@PathVariable("id") int id){
System.out.println("findGoodsById..."+id);
String url = "http://eureka-provider/goods/findOne/"+id;
// 3. 调用方法
Goods goods = restTemplate.getForObject(url, Goods.class);
return goods;
}
实现步骤3-在provider项目GoodController中修改findOne方法
@Value("${server.port}")
private String port;
@GetMapping("/findOne/{id}")
public Goods findOne(@PathVariable("id") int id){
Goods goods = goodsService.findOne(id);
goods.setTitle(goods.getTitle()+":"+port);//将端口号设置到上屏的title上,便于分辨
return goods;
}
4.3-负载均衡
-
Ribbon负载均衡策略
- 随机:RandomRule
- 轮询:RoundRobinRule
- 最小并发:BestAvailabelRule
- 过滤:AvailabilityFilteringRule
- 响应时间:WeightedResponseTimeRule
- 轮询重试:RetryRule
- 性能可用性:ZoneAvoidanceRule
-
设置负载均衡策略
-
编码
1.创建MyRule
package com.itheima.consumer.config; 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 MyRule { @Bean public IRule getRule(){ return new RandomRule(); } }
-
配置
- 代码的方式配置负载均衡策略
/** * * 配置ribbon的策略 * name:设置应用的名称 * configuration:设置负载均衡策略 * */ @RibbonClient(name = "eureka-provider",configuration = MyRule.class) @EnableDiscoveryClient // 激活DiscoveryClient @EnableEurekaClient @SpringBootApplication public class ConsumerApp { public static void main(String[] args) { SpringApplication.run(ConsumerApp.class,args); } }
- 配置文件配置负载均衡策略
eureka-provider: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
-