Ribbon在工作时分为两步:

第一步:先选择 EurekaServer,它优先选择在同一个区域内负载较少的Server;

第二步:再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址;

其中Ribbon提供了多种策略,比如轮询、随机、根据响应时间加权。

一、Ribbon算法的介绍

Ribbon的源码地址:https://github.com/Netflix/ribbon

IRule:根据特定算法中从服务器列表中选取一个要访问的服务,Ribbon默认的算法为轮询算法;

Ribbon中的7中负载均衡算法:

(1)RoundRobinRule:轮询;

(2)RandomRule:随机;

(3)AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;

(4)WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越大。刚启动时如果统计信息不足,则使用RoundRobinRule(轮询)策略,等统计信息足够,会切换到WeightedResponseTimeRule;

(5)RetryRule:先按照RoundRobinRule(轮询)策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务;

(6)BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;

(7)ZoneAvoidanceRule:复合判断Server所在区域的性能和Server的可用性选择服务器;

ribbion的负载均衡算法结构:

二、配置指定的负载均衡算法

1、打开消费者工程,增加如下的配置:

@Configuration
public class ConfigBean
{
@Bean
@LoadBalanced //Ribbon 是客户端负载均衡的工具;
public RestTemplate getRestTemplate()
{
return new RestTemplate();
} //配置负载均衡的策略为随机,默认算法为轮询算法
@Bean
public IRule myRule()
{
//return new RoundRobinRule();
return new
RandomRule();
}

}

2、启动类增加 @EnableEurekaClient 注解

@SpringBootApplication
@EnableEurekaClient //本服务启动后自动注册到eureka中
public class DeptProvider8001_App
{
public static void main(String[] args)
{
SpringApplication.run(DeptProvider8001_App.class, args);
}
}

3、然后重启这个消费者服务,访问:http://localhost/consumer/dept/get/1;查看到随机访问到3个生产者服务。

最新文章

  1. iOS中延时执行的几种方式的比较和汇总
  2. 【HDU 4408】Minimum Spanning Tree(最小生成树计数)
  3. (转)对.net系统架构改造的一点经验和教训
  4. UML基础:统一建模语言简介
  5. Scala学习——数组/映射/元组
  6. sysfs - 用于导出内核对象(kobject)的文件系统
  7. 【IT名人堂】何云飞:阿里云数据库的架构演进之路
  8. android手机中图片的拖拉及浏览功能
  9. eclipse 必备
  10. iOS开发——高级技术&支付宝功能的实现
  11. jsp文件怎么打开呢
  12. springmvc json数据
  13. iOS ZBar扫码简单实现
  14. 【bug】java.lang.NoSuchMethodError: android.widget.TextView.setBackground
  15. iOS has conflicting provisioning settings 解法
  16. 彻底弄懂python编码
  17. P1963 [NOI2009]变换序列
  18. mybatis-generator-maven逆向工程
  19. django框架 input 文本框 单选框 多选框 上传文件 等数据传输后台的程序 request.getlist接收多个结果 obj.chunks 用于文件传输 enctype="multipart/form-data文件传输必备表头
  20. 【Qt开发】QTime类

热门文章

  1. MVC+Ninject+三层架构+代码生成 -- 总结(二、建項目)
  2. 2019 vs 如何升级到.net core 3.0 版本
  3. mysql启动时出现ERROR 2003问题的解决方法
  4. C#使用post方式提交json数据
  5. 基于Jquery的进度条插件(实用)
  6. java自适应响应式 企业网站源码 SSM 生成静态化 手机 平板 PC
  7. linux 搭建swoole
  8. Vue-Cli 指南
  9. linux部署django项目流程(全)
  10. Python从零开始——基础语法