ribbonmq超时配置_Spring Cloud 各组件调优参数

  • Post author:
  • Post category:其他


Spring Cloud整合了各种组件,每个组件往往还有各种参数。本文来详细探讨Spring Cloud各组件的调优参数。

Tomcat配置参数

1 server:

2 tomcat:

3 max-connections: 0 # 默认值

4 max-threads: 0 # 默认值

Hystrix配置参数

如隔离策略是THREAD:

1 hystrix.threadpool.default.coreSize: 10

2 hystrix.threadpool.default.maximumSize: 10

3 hystrix.threadpool.default.maxQueueSize: -1 # 如该值为-1,那么使用的是SynchronousQueue,

4 否则使用的是LinkedBlockingQueue。

5 注意,修改MQ的类型需要重启。例如从-1修改为100,需要重启,因为使用的Queue类型发生了变化

如果想对特定的HystrixThreadPoolKey 进行配置,则将default 改为 HystrixThreadPoolKey 即可。

如果隔离策略是SEMAPHORE:

1 hystrix.command.default.execution.isolation.strategy: SEMAPHORE

2 hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests: 10 # 默认值

如果想对指定的HystrixCommandKey 进行配置,则将default 改为HystrixCommandKey 即可。

Feign配置参数

Feign默认没有线程池。

当使用HttpClient时,可如下设置:

1 feign:

2 httpclient:

3 enabled: true

4 max-connections: 200 # 默认值

5 max-connections-per-route: 50 # 默认值

代码详见:

org.springframework.cloud.netflix.feign.FeignAutoConfiguration.

HttpClientFeignConfiguration#connectionManager

org.springframework.cloud.netflix.feign.ribbon.

HttpClientFeignLoadBalancedConfiguration.HttpClientFeignConfiguration#connectionManager

当使用OKHttp时,可如下设置:

1 feign:

2 okhttp:

3 enabled: true

4 httpclient:

5 max-connections: 200 # 默认值

6 max-connections-per-route: 50 # 默认值

代码详见:

org.springframework.cloud.netflix.feign.FeignAutoConfiguration.

OkHttpFeignConfiguration#httpClientConnectionPool 。

org.springframework.cloud.netflix.feign.ribbon.OkHttpFeignLoadBalancedConfiguration.

OkHttpFeignConfiguration#httpClientConnectionPool

Zuul配置参数

我们知道Hystrix有隔离策略:THREAD 以及SEMAPHORE ,默认是 SEMAPHORE 。

隔离策略

1 zuul:

2 ribbon-isolation-strategy: thread

最大信号

当Zuul的隔离策略为SEMAPHORE时:

设置默认最大信号量:

1 zuul:

2 semaphore:

3 max-semaphores: 100 # 默认值

设置指定服务的最大信号量:

1 zuul:

2 eureka:

3 :

4 semaphore:

5 max-semaphores: 100 # 默认值

参考:

https://github.com/spring-cloud/spring-cloud-netflix/issues/1362 ,非常重要,里面指出,不同版本配置略有差异。 在Brixton.SR5及更早版本中,是 RibbonCommand ,从Brixton.SR6 开始,只需写 即可,即:服务注册到Eureka Server上的名称。

Zuul参数

Hystrix并发参数

Edgware及之后的版本中,当Zuul的隔离策略为THREAD时,可为Hystrix配置独立线程池:

如果不设置独立线程池,那么HystrixThreadPoolKey 是 RibbonCommand 。

Hystrix并发配置参数请参考《Hystrix并发配置参数一节》

Zuul并发参数:

对于形如:

1 zuul:

2 routes:

3 user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。

4 url: http://localhost:8000/ # 指定的url

5 path: /user/** # url对应的路径。

的路由,可使用如下方式配置并发参数:

1 zuul:

2 host:

3 max-total-connections: 200 # 默认值

4 max-per-route-connections: 20 # 默认值

当Zuul底层使用的是Apache HttpClient时,对于使用Ribbon的路由,可使用如下方式配置并发参数:

1 serviceId:

2 ribbon:

3 MaxTotalConnections: 0 # 默认值

4 MaxConnectionsPerHost: 0 # 默认值

相关代码:org.springframework.cloud.netflix.ribbon.support.AbstractLoadBalancingClient 子类的createDelegate 方法。

springcloud之Feign、ribbon设置超时时间和重试机制的总结

因为测试 Feign + Hystrix 搭配模式下的降级(fallback)超时时间自定义问题,这里的不同组件的超时时间设置问题。

一、 Feign设置超时时间

使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间

#hystrix的超时时间

hystrix:

command:

default:

execution:

timeout:

enabled: true

isolation:

thread:

timeoutInMilliseconds: 9000

#ribbon的超时时间

ribbon:

ReadTimeout: 3000

ConnectTimeout: 3000

一般情况下 都是 ribbon 的超时时间(

Feign中,默认使用的Retryer是NEVER_RETRY,

因为ribbon的重试机制和Feign的重试机制有冲突,所以NEVER_RETRY源码中默认关闭Feign的重试机制,源码如下:

要开启Feign的重试机制如下:(Feign默认重试五次 源码中有)

@Bean

Retryer feignRetryer() {

return new Retryer.Default();

}

Feign的default的retryer源码如下:

二、ribbon的重试机制

设置重试次数:

ribbon:

ReadTimeout: 3000

ConnectTimeout: 3000

MaxAutoRetries: 1 #同一台实例最大重试次数,不包括首次调用

MaxAutoRetriesNextServer: 1 #重试负载均衡其他的实例最大重试次数,不包括首次调用

OkToRetryOnAllOperations: false #是否所有操作都重试

根据上面的参数计算重试的次数:MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries *MaxAutoRetriesNextServer) 即重试3次 则一共产生4次调用

设置超时ribbon的超时时间

如果在重试期间,时间超过了hystrix的超时时间,便会立即执行熔断,fallback。所以要根据上面配置的参数计算hystrix的超时时间,使得在重试期间不能达到hystrix的超时时间,不然重试机制就会没有意义

hystrix超时时间的计算: (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout 即按照以上的配置 hystrix的超时时间应该配置为 (1+1+1)*3=9秒

当ribbon超时后且hystrix没有超时,便会采取重试机制。当OkToRetryOnAllOperations设置为false时,只会对get请求进行重试。如果设置为true,便会对所有的请求进行重试,如果是put或post等写操作,如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。

如果不配置ribbon的重试次数,默认会重试一次

注意:

默认情况下,GET方式请求无论是连接异常还是读取异常,都会进行重试

非GET方式请求,只有连接异常时,才会进行重试

断路器超时与Ribbon超时关系

背景

springCloud:Finchley.RELEASE

官方建议

当Ribbon客户端和hystrix同时使用时,您需要确保您的hystrix超时时间配置比Ribbon超时时间更长,包括可能进行的重试。例如,如果您的Ribbon连接超时为1秒,而Ribbon客户端可能会重试该请求3次,则hystrix超时应该略大于3秒。

三、如何设置Hystrix线程池大小

Hystrix线程池大小默认为10hystrix:

threadpool:

default:

coreSize: 10

每秒请求数 = 1/响应时长(单位s) * 线程数 = 线程数 / 响应时长(单位s)

也就是

线程数 = 每秒请求数 * 响应时长(单位s) + (缓冲线程数)

标准一点的公式就是QPS * 99% cost + redundancy count

比如一台服务, 平均每秒大概收到20个请求,每个请求平均响应时长估计在500ms,

线程数 = 20 * 500 / 1000 = 10

为了应对峰值高并发,加上缓冲线程,比如这里为了好计算设为5,就是 10 + 5 = 15个线程

Dubbo性能调优参数及原理

本文是针对 Dubbo 协议调用的调优指导,详细说明常用调优参数的作用域及源码. Dubbo调用模型 常用性能调优参数 参数名 作用范围 默认值 说明 备注 threads provider 200 …

Spring Cloud各个组件的配套使用

我们从整体上来看一下Spring Cloud各个组件如何来配套使用:  从上图可以看出Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构. 其中Eureka负责服务的注册与发现, …

Linux TCP/IP调优参数 /proc/sys/net/目录

所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default ” …

hadoop作业调优参数整理及原理

hadoop作业调优参数整理及原理 10/22. 2013 1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并 …

Spring Cloud 各个组件介绍

从上图可以看出 Spring Cloud 各个组件相互配合,合作支持了一套完整的微服务架构: Eureka 负责服务的注册与发现,很好地将各服务连接起来. Hystrix 负责监控服务之间的调用情况, …

JVM性能调优的6大步骤,及关键调优参数详解

JVM性能调优方法和步骤1.监控GC的状态2.生成堆的dump文件3.分析dump文件4.分析结果,判断是否需要优化5.调整GC类型和内存分配6.不断分析和调整JVM调优参数参考 对JVM内存的系统级 …

Spring Cloud常用组件及各组件版本对应关系图

Spring Cloud常用组件: 架构图: 版本对应关系:

直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解

JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 …

Spring / Hibernate 应用性能调优

来源:ImportNew – 陈晓舜 对大部分典型的Spring/Hibernate企业应用来说,应用的性能大部分由持久层的性能决定. 这篇文章会重温一下怎么去确认我们的应用是否是”数据库依赖(dat …

随机推荐

wex5 开机图片时间长

作用: 控制刚打开图片 时间长 修改config.xml  地址:F:\wex\model\Native\templates\advanced 延迟的时间是在本地app的 config.xml中修改, …

修改mysql用户名密码 和 PHPmysqlAdmin对应密码修改

本地的mysql运行时,可能会用到修改用户名密码: mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘输入新密码’);不存在修改用户啊 …

在iOS App的图标上显示版本信息

最近读到一篇文章(http://www.merowing.info/2013/03/overlaying-application-version-on-top-of-your-icon/)介绍了一种非 …

BZOJ 3572 世界树(虚树)

http://www.lydsy.com/JudgeOnline/problem.php?id=3572 思路:建立虚树,然后可以发现,每条边不是同归属于一端,那就是切开,一半给上面,一半给下面. # …

weak和assign区别

weak比assign多了一个功能,当对象消失后自动把指针变成nil haofanazenmeban[4002:406590] controller:

python实现定时任务

定时任务的实现方式有很多种,如windows服务,借助其他定时器jenkins运行脚本等方式.本文介绍的是python中的一个轻量级模块schedule. 安装 pip命令:pip install s …

Word 2010 制作文档结构之图标自动编号设置

注意: 使用图片自动编号时,如果文档标题使用的样式是通过“将所选内容保存为新快速样式”所生成的样式,则图片自动编号不会生效 因此设置标题样式时,不要 新建样式,直接使用word预设的“标题 1”样式和 …

安装vmware虚拟机和linux(centos)

打开 WMware Workstation 8,然后选择新建虚拟机 2 新建虚拟机向导 选择 自定义(高级)(C)然后点击[下一步]按钮 3 选择虚拟机硬件兼容性 选择 workstation 8.0 …

关于responseHeader的一些基础设置

1.关于响应头的一些基础设置 //设置相应头 response.addHeader(“name”,”zhangsan”); response.addIntHea …

Spring课程 Spring入门篇 5-7 advisors

1 简析 1.1 advisor简析(这个不太明白,后续再看吧) 2 代码演练 2.1 环绕通知的综合应用(代码和视频对不上,慕课网讲的本身有问题)       1 简析 1.1 advisor简析( …



版权声明:本文为weixin_39986178原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。