ribbon基于接口配置超时_Spring Cloud Ribbon配置详解
本节我们主要介绍 Ribbon 的一些常用配置和配置 Ribbon 的两种方式。
常用配置
1. 禁用 Eureka
当我们在 RestTemplate 上添加 @LoadBalanced 注解后,就可以用服务名称来调用接口了,当有多个服务的时候,还能做负载均衡。
这是因为 Eureka 中的服务信息已经被拉取到了客户端本地,如果我们不想和 Eureka 集成,可以通过下面的配置方法将其禁用。
# 禁用 Eureka
ribbon.eureka.enabled=false
当我们禁用了 Eureka 之后,就不能使用服务名称去调用接口了,必须指定服务地址。
2. 配置接口地址列表
上面我们讲了可以禁用 Eureka,禁用之后就需要手动配置调用的服务地址了,配置如下:
# 禁用 Eureka 后手动配置服务地址
ribbon-config-demo.ribbon.listOfServers=localhost:8081,localhost:8083
这个配置是针对具体服务的,前缀就是服务名称,配置完之后就可以和之前一样使用服务名称来调用接口了。
3. 配置负载均衡策略
Ribbon 默认的策略是轮询,从我们前面讲解的例子输出的结果就可以看出来,Ribbon 中提供了很多的策略,这个在后面会进行讲解。我们通过配置可以指定服务使用哪种策略来进行负载操作。
4. 超时时间
Ribbon 中有两种和时间相关的设置,分别是请求连接的超时时间和请求处理的超时时间,设置规则如下:
# 请求连接的超时时间
ribbon.ConnectTimeout=2000
# 请求处理的超时时间
ribbon.ReadTimeout=5000
也可以为每个Ribbon客户端设置不同的超时时间, 通过服务名称进行指定:
ribbon-config-demo.ribbon.ConnectTimeout=2000
ribbon-config-demo.ribbon.ReadTimeout=5000
5. 并发参数
# 最大连接数
ribbon.MaxTotalConnections=500
# 每个host最大连接数
ribbon.MaxConnectionsPerHost=500
代码配置 Ribbon
配置 Ribbon 最简单的方式就是通过配置文件实现。当然我们也可以通过代码的方式来配置。
通过代码方式来配置之前自定义的负载策略,首先需要创建一个配置类,初始化自定义的策略,代码如下所示。
@Configuration
public class BeanConfiguration {
@Bean
public MyRule rule() {
return new MyRule();
}
}
创建一个 Ribbon 客户端的配置类,关联 BeanConfiguration,用 name 来指定调用的服务名称,代码如下所示。
@RibbonClient(name = "ribbon-config-demo", configuration = BeanConfiguration.class)
public class RibbonClientConfig {
}
可以去掉之前配置文件中的策略配置,然后重启服务,访问接口即可看到和之前一样的效果。
配置文件方式配置 Ribbon
除了使用代码进行 Ribbon 的配置,我们还可以通过配置文件的方式来为 Ribbon 指定对应的配置:
.ribbon.NFLoadBalancerClassName: Should implement ILoadBalancer(负载均衡器操作接口)
.ribbon.NFLoadBalancerRuleClassName: Should implement IRule(负载均衡算法)
.ribbon.NFLoadBalancerPingClassName: Should implement IPing(服务可用性检查)
.ribbon.NIWSServerListClassName: Should implement ServerList(服务列表获取)
.ribbon.NIWSServerListFilterClassName: Should implement ServerListFilter(服务列表的过滤)
重试机制
在集群环境中,用多个节点来提供服务,难免会有某个节点出现故障。用 Nginx 做负载均衡的时候,如果你的应用是无状态的、可以滚动发布的,也就是需要一台台去重启应用,这样对用户的影响其实是比较小的,因为 Nginx 在转发请求失败后会重新将该请求转发到别的实例上去。
由于 Eureka 是基于 AP 原则构建的,牺牲了数据的一致性,每个 Eureka 服务都会保存注册的服务信息,当注册的客户端与 Eureka 的心跳无法保持时,有可能是网络原因,也有可能是服务挂掉了。
在这种情况下,Eureka 中还会在一段时间内保存注册信息。这个时候客户端就有可能拿到已经挂掉了的服务信息,故 Ribbon 就有可能拿到已经失效了的服务信息,这样就会导致发生失败的请求。
这种问题我们可以利用重试机制来避免。重试机制就是当 Ribbon 发现请求的服务不可到达时,重新请求另外的服务。
1. RetryRule 重试
解决上述问题,最简单的方法就是利用 Ribbon 自带的重试策略进行重试,此时只需要指定某个服务的负载策略为重试策略即可:
ribbon-config-demo.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RetryRule
2. Spring Retry 重试
除了使用 Ribbon 自带的重试策略,我们还可以通过集成 Spring Retry 来进行重试操作。
在 pom.xml 中添加 Spring Retry 的依赖,代码如下所示。
org.springframework.retry
spring-retry
配置重试次数等信息:
# 对当前实例的重试次数
ribbon.maxAutoRetries=1
# 切换实例的重试次数
ribbon.maxAutoRetriesNextServer=3
# 对所有操作请求都进行重试
ribbon.okToRetryOnAllOperations=true
# 对Http响应码进行重试
ribbon.retryableStatusCodes=500,404,502
ribbon基于接口配置超时_Spring Cloud Ribbon配置详解相关推荐
- @scheduled注解配置时间_Spring Cloud 之配置服务器(下)配置刷新
学习目标 本文所讲内容为上一文的后续,我们在上一文中学习了什么是 Spring Cloud 的配置服务器:如何使用两种方式搭建 Spring Cloud Config Server 以及客户端如何连接 ...
- 89-Spring Cloud 微服务详解
Spring Cloud 微服务详解 微服务架构: 在说明该架构之前,再次的说明互联网应用架构演进(虽然之前说明过了) 随着互联网的发展,用户群体逐渐扩大,网站的流量成倍增长,常规的单体架构已无法满足 ...
- Spring Cloud限流详解(附源码)
在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...
- Spring Cloud限流详解(内含源码)
为什么80%的码农都做不了架构师?>>> 原文:http://www.itmuch.com/spring-cloud-sum/spring-cloud-ratelimit/ 在 ...
- Tomcat安装、配置、优化及负载均衡详解
博客园 首页 新随笔 联系 管理 订阅 随笔- 31 文章- 0 评论- 25 Tomcat安装.配置.优化及负载均衡详解 一.常见JavaWeb服务器 1.WebLogic:是BEA ...
- python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)
paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件. 关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上 ...
- mybatis接口中的方法重载_MyBatis的Mapper接口以及Example的实例函数及详解
一.mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 int countByExample(UserExample example) thorws SQLException ...
- python cv2 轮廓的包络 面积_Python 基于FIR实现Hilbert滤波器求信号包络详解
在通信领域,可以通过希尔伯特变换求解解析信号,进而求解窄带信号的包络. 实现希尔伯特变换有两种方法,一种是对信号做FFT,单后只保留单边频谱,在做IFFT,我们称之为频域方法:另一种是基于FIR根据传 ...
- 基于Java的音频转发服务器_javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)...
javaCV系列文章: 补充篇: 前言:本篇文章基于javaCV-FFMPEG,关于javaCV官方是没有文档或者api文档可以参考的,所以还有很多地方需要研究: 本章对于ffmpeg的需要有一定了解 ...
- Linux配置启动挂载:fstab文件详解
Linux配置启动挂载:fstab文件详解 [日期:2014-12-23] 来源:Linux社区 作者:aceking10 [字体:大 中 小] fstab文件介绍 fstab文件包含了你的电脑上的存 ...
最新文章
- 解释一下SQLSERVER事务日志记录
- 问题解决:Apache: You don't have permission to access / on this server
- Keras学习代码—github官网examples
- java 打包jar文件以在没有安装JDK或JRE的机子上运行
- [转载]Hot Door CADtools (实战篇)
- oracle 服务名丢失,win2003 oracle服务丢失后恢复的一个例子
- 从2018百度前端技术学院看代码究竟应该怎么写(2)
- 扫描控件Web在线Applet
- linux值centos7安装docker
- 双击jar包 运行SpringBoot项目
- SuperMap iClient3D for WebGL实现三维管线分析
- sql语句查询计算机系,SQL查询语句基础
- 软件测试人员如何月薪过万、月薪过万的秘籍
- 2021年嵌入式校招求职经历
- 以清净心看世界,以欢喜心过生活,以平常心生情味,以柔软心除挂碍。
- 手把手教你整合SSM实现一个简单的CRUD项目
- 电脑端bilibili视频缓存合并视频的解惑
- 从1到100怎么做?小红书KOL五大阶段运营增长策略
- zbb20170605 Drools java 规则引擎
- 《操作系统》 第二章 知识点整理
热门文章
- 【优化算法】贪婪策略和变异策略的混合蚁群算法【含Matlab源码 1521期】
- 【飞行器】基于matlab多源信息融合算法多旋翼无人机组合导航系统【含Matlab源码 1267期】
- 【图像提取】基于matlab DNA编解码多尺度形态学提取眼前节组织【含Matlab源码 1191期】
- 【图像检索】基于matlab GUI KNN图像检索【含Matlab源码 267期】
- 【图像分割】基于matlab改进的细菌觅食算法双阈值图像分割【含Matlab源码 069期】
- 【滤波器】基于matlab GUI IIR数字滤波器设计【含Matlab源码 044期】
- node-red 可视化_可视化和注意-第4部分
- python:DataFrame对单列或多列进行整列的运算(map, apply, transform, agg)
- linux ext4分区无损扩容,linux操作系统无损升级文件系统ext3至ext4--数据盘篇
- 台服海岛纪元显示无法连接服务器,打开海岛纪元提示网络异常或者连接不上