Ribbon简介
Ribbon是Neflix提供的一个基于HTTP和TCP的客户端负载均衡
Ribbon两个功能:
- 简化远程调用
- 负载均衡
负载均衡
- 服务端负载均衡
- 负载均衡算法再服务端
- 由负载均衡维护服务地址列表
- 客户端负载均衡
- 负载均衡算法再客户端
- 客户端维护服务地址列表
Ribbon远程调用
这里使用到eureka的consumer provider和server具体搭建参考
spirngcloud Eureka服务治理(注册中心)实操_爱画图的小火纸的博客-CSDN博客
- 使用Ribbon 简化restTemplate调用
- 在声明restTemplate的Bean时候,添加一个注解:@LoadBalanced
- 在使用restTemplate发起请求时,需要定义url时,host:port可以替换为 服务提供方的应用名
1.添加注解@LoadBalanced
2.host:port可以替换为 服务提供方的应用名
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/goods/{id}")
public Goods findGoodsById(@PathVariable("id") int id){
//host:port可以替换为 服务提供方的应用名
String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;
//3.调用方法
Goods goods = restTemplate.getForObject(url,Goods.class);
return goods;
}
}
负载均衡初识
为了方便监控消费者调用了哪个服务,注入port监控
打开使程序可并行按钮,可以一个程序运行同时运行两个
将provider服务开启两次,第二次开始时修改端口,再此打开即可有两个程序运行(模拟两个服务)
启动步骤:
- 启动次序为 server ——>provider ——> 修改provider端口号8001后再启动 ——> consumer
- 刷新consumer web界面 所调用的服务在改变 可根据port的改变监控到
Ribbon负载均衡策略
- 随机:RandomRule 生成随机数,随机选择一个服务
- 轮询:RounRobinRule 默认的一个一次
- 最小并发:BestAvailableRule 哪个访问的少选哪个(eureka内有记录)
- 过滤:AvailabilityFilteringRule 过滤掉坏的和并发高的
- 响应时间:WeightedResponseTimeRule eureka向每个服务发一个数据包,哪个服务先响应 选哪个
- 轮询重试:RetryRule 轮询十圈都没找到好的服务 就会回复响应失败
- 性能可用性:ZoneAvoidanceRule 综合服务性能可用性得分哪个高选哪个
共7种 默认轮询
设置负载均衡策略
负载均衡算法在客户端
两种方式:
- 编码
编写类MyRule
//设置负载均衡的规则
@Configuration
public class MyRule {
@Bean
public IRule rule(){
return new RandomRule();
}
}
在consumer的启动类添加注解
@EnableDiscoveryClient //激活DiscoveryClient 可无
//启动类
@EnableEurekaClient //可无
@SpringBootApplication
/*
* 配置Ribbon的负载均衡策略
* name 设置服务提供方的应用名称
* configuration 设置负载均衡Bean
* */
@RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
public class ConsumerApp {
public static void main(String[] args){
SpringApplication.run(ConsumerApp.class,args);
}
}
- 配置
consumer添加配置yml文件中
#配置的方式设置Ribbon的负载均衡策略
EUREKA-PROVIDER: #设置的服务提供方的 应用名称
ribbon:
NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #策略类
结果:
这个端口随机显示意思就是消费者随机使用eureka里的服务 ,修改负载均衡策略成功