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. 我虐小车千百遍,小车待我如初恋
  2. 简单的多显示器解决方案
  3. CSS选择器的权重与优先规则
  4. gcp devops_将GCP AI平台笔记本用作可重现的数据科学环境
  5. 程序员:站在自学鄙视链顶端的王者(太真实!)
  6. 力扣题目——429. N 叉树的层序遍历
  7. ubuntu 配置 tftp 服务器
  8. 【渝粤题库】陕西师范大学300009 考古学概论
  9. android 获取已安装的应用大小,Android获得已安装应用大小
  10. DB2数据库迁移,数据库导入导出
  11. C#检测ocx控件是否注册
  12. java的第十一章总结(枚举,泛型)
  13. 互联网发展阶段的三阶段是什么?从门户到搜索,到移动互联网
  14. git 命令带用户名密码
  15. 海港中学2021高考成绩查询,热烈祝贺海港高中2020年高考再创佳绩
  16. Ubuntu/linux c开发(4)线程池
  17. 一行Python能实现什么丧心病狂的功能?
  18. 软通python编程题_软通动力笔试(带参考答案)
  19. 戴上口罩AI变“脸盲”?口罩人脸识别黑科技来袭
  20. LIN总线协议详解3(帧的类型)

热门文章

  1. warning: LF will be replaced by CRLF in 解决办法
  2. vue的is和v-bind:is怎么用
  3. 数组的常用方法-(部分带有重构函数)
  4. 《单片机原理与应用》——并行IO口原理
  5. android 好的 钢琴软件,真正完美的android钢琴软件
  6. smart-doc初体验-springboot生成自动文档
  7. Swagger框架学习分享
  8. 知到网课大学生创业概论与实践考试试题|真题|题库(含答案)
  9. C7-如何学好C语言
  10. 构建智慧B2B集采商城系统,实现房地产行业采购业务的集中管控