Ribbon的概述

Ribbon是Spring Cloud微服务体系的弹性拓张组件,与其他组件结合可以发挥出强大的作用。此外,它具备了丰富的负载均衡策略,重试机制。支持多协议的异步与响应模型,容错,缓存与批处理等功能可以让你很容易的构建自己的微服务架构.
复制代码

Ribbon与负载均衡

负载均衡常见的有软件负载很硬件负载,代表的产品蛋Nginx与F5;Ribbon和他们的区别就是集中式负载均衡与进程内负载均衡
的区别。集中式负载均衡是指位于因特网与服务提供者之间,并负责吧网络请求转发到各个提供单位,这个时候Nginx与F5就
可以划分为一类了,也可以成为服务端负载均衡策略。进程内负载均衡就是从一个实例库选取一个实例进行流量导入,在微
服务的范畴内,实例库一般是存储在Eureka,Consul,Zookeeper,etcd这样的注册中心。
复制代码

Ribbon负载均衡策略与自定义配置

ribbon的负载均衡策略主要包括以下几种:

策略类 命名 描述
RandomRule 随机策略 随机选择server
RoundRobinRule 轮询策略 按顺序选择server
RetryRule 重试策略 在一个配置时间段内当选择server不成功,则一直尝试选择一个可用的server
BestAvailableRule 最低并发策略 逐个考察server,如果server断路器打开,则忽略,在选择其中并发链接最低的server
AvailabilityFilteringRule 可用过滤策略 过滤掉一直链接失败并标记为circuit tripped的server,过滤掉哪些高并发链接
ResponseTimeWeightedRule 响应时间加权策略 根据server的响应时间分配权重。响应时间越长,权重越低,被选择到的概略就越低,权重越高,被选择到的概率就越高。
ZoneAvoidanceRule 区域权衡策略 综合判断server所在的区域的性能和server的可用性轮询选择server,并且判定一个AWS Zobe的运行性能是否可用,提出不可用的Zone中所有server。

全局策略设置

    @Configurationpublic class MyConfiguration{@Beanpublic IRule ribbonRule(){return new RandomRule();}}
复制代码

基于主机的策略设置

如果我们使用不想针对全局设置,那么可以针对服务源进行特殊的策略配置,可以使用@RibbonClient注解,只需稍微修改上面的代码即可,@RibbonClient注解主要用来对原服务进行约束。

    @Configuration@AvoidScanpublic class MyConfiguration{@Beanpublic IRule ribbonRule(){return new RandomRule();}}
在启动类里面加上如下的注解即可完成针对具体的服务源使用不同的负载均衡策略,使用@AvoidScan注解告诉Spring容器不要去扫描该注解,具体的服务源是使用特定的配置指定特定负载均衡的策略。
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@RibbonClient(name = "ribbon-client",configuration = MyConfiguration.class)
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = AvoidScan.class)})
public class RibbonBalancerApplication {//定义一个负载均衡的RestTemplate@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(RibbonBalancerApplication.class,args);}
}
复制代码

除了上面的针对服务源使用不同的策略之外,还可以使用@RibbonClients针对多个服务源进行策略的指定。

@RibbonClients(value = {@RibbonClient(name = "ribbon-client",configuration = MyConfiguration.class),@RibbonClient(name = "ribbon-client-b",configuration = MyConfiguration.class)
})
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = AvoidScan.class)})
复制代码

基于配置文件的策略设置

使用SpringBoot的优点是习惯优于配置,大多数的配置都是SpringBoot已经帮助我们配置好的,但是少数的情况下,我们可以通过少量配置文件去自义我们的字定义的配置我们的负载均衡策略,具体的语法如下:

clientname:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadBalancer.RandomRule
复制代码

Ribbon超时与重试

使用HTTP发起请求,免不了要经历极端的环境,此时对调用进行时限控制以及时限之后的重试很重要。 正常情况我们可以使用下面的代码开启ribbon重试的机制,但是F版之后就默认开启了,无需手动配置重试机制的开启,我们要做的就是要做的就是要配置时限。

使用spring.cloud.loadbalancer.retry.enabled: true开启服务重试的机制//ribbon内部的配置类
@ConfigurationProperties("spring.cloud.loadbalancer.retry")
public class LoadBalancerRetryProperties {private boolean enabled = true;public LoadBalancerRetryProperties() {}public boolean isEnabled() {return this.enabled;}public void setEnabled(boolean enabled) {this.enabled = enabled;}
}
复制代码

具体的配置可以使用下面的配置

ribbon-client:ribbon:ConnectTimeout: 3000ReadTimeout: 60000MaxAutoRetries: 1 #对第一次请求的服务的重试次数MaxAutoRetriesNextServer: 1 #要重试的下一个服务的最大数量(不包括第一个服务)OkToRetryOnAllOperations: trueNFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#
复制代码

Ribbon的饥饿加载

Ribbon在进行客户端负载均衡的时候并不是在启动的时候就加载上下文的,实在实际请求的时候才加载,有点像servlet的第一次请求的时候才去生成实例,这回导致第一次请求会比较的缓慢,甚至可能会出现超时的情况。所以我们可以指定具体的客户端名称来开启饥饿加载,即在启动的时候便加载素养的配置项的应用上下文。

ribbon:eager-load:enabled: trueclients: ribbon-client-a, ribbon-client-b, ribbon-client-c
复制代码

转载于:https://juejin.im/post/5cce2ed0f265da039955ed51

Ribbon使用方法相关推荐

  1. springcloud+springboot+Eureka+Feign+Ribbon+Hystrix+Zuul

    Springcloud集成Eureka Eureka服务端和客户端 本实例采用springboot,eureka和feign/ribbon,hystrix,zuul,mybatis,redis 1. ...

  2. Spring Cloud在中小型项目中的应用

    思考方向包括市场.学习.前后端.测试.配置.部署.开发以及运维. Eureka/Consul:服务发现 (根据情况选择一个)  Hystrix:断路器   Zuul:智能路由   Ribbon/Fei ...

  3. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  4. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  5. 解决Spring Cloud中Feign/Ribbon第一次请求失败的方法

    前言 在Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过 ...

  6. delphi下实现ribbon界面的方法(一)

    delphi下实现ribbon界面的方法(一) office 2007和2010是现在大多数人经常使用的办公软件,几乎每天都在使用.因此,在软件中如果使用类office的界面样式,客户用着非常习惯,而 ...

  7. controller调用controller的方法_SpringCloud(5):Feign整合Ribbon和Hystrix来进行远程调用与服务熔断...

    Feign 前面我们虽然使用了Ribbon和Hystrix进行了负载均衡和服务熔断,但是我们的消费方代码中由于要调用提供方的服务,比如: String user = this.restTemplate ...

  8. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!

    作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 在 Nacos 中,服务调用主要是通过 RestTemplate + Ribbon ...

  9. Spring Cloud微服务开发笔记4——Ribbon框架使用方法

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍Netfilx的第二个框架--Ribbon. (1)Ribbon是Netflix下的负载均衡框架,支持可插拔式的负载均 ...

最新文章

  1. mysql 取出20条数据_“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法...
  2. C#(9)——API调用
  3. Eclipse(STS) 初次搭建Spring Cloud项目之声明式REST调用+负载均衡实现Feign(四)
  4. CSS3弹性伸缩布局(一)——box布局
  5. JDBC链接SQLServer2005 Express
  6. Virtual DOM(虚拟dom-2)
  7. oracle设置表的主键和外键,Oracle中给表添加主键、外键
  8. 我觉得吧,这么学JavaScript,你才能通
  9. 九宫怎么排列和使用_开心数独:好友都在玩的数独九宫格小游戏,居家无聊杀时间必备!...
  10. cad插件_CAD素材与插件合集
  11. 微信小程序游戏怎么开发入门教程
  12. python正则表达式多匹配成了断句
  13. Python绘图实例32:矩形螺旋线绘制
  14. 项目经理常用软件大全
  15. JavaScript 获取当前日期——JS 中的今天日期
  16. python:爬取租房100页数据
  17. PLSQL - 一次外连接翻车的教训
  18. Mercurial修改历史changeset
  19. 高维数据PCA降维可视化(KNN分类)
  20. Flash大文件断点续传解决方案

热门文章

  1. 申宝股票-题材股分化
  2. 有车一族 教你如何防止被电子眼拍到
  3. 开源网安受邀参加2023澳门万讯论坛,引领软件安全领域国产化替代浪潮
  4. 【Android开发】greenrobot三大开源利器详解(一)——EventBus
  5. 计算长方形的周长和面积(类和对象)(SDUT 3339)
  6. python3计算长方形的周长和面积
  7. IST:Iterative Shrinkage/Thresholding和Iterative Soft Thresholding
  8. spring(转账为例)四种实现方式一
  9. 根据字段值取字段别名
  10. 手把手的教你在windows上安装cygwin教程以及验证是否安装成功