转自:https://blog.csdn.net/xx326664162/article/details/83625104

一、 Zuul 服务网关

服务网关 = 路由转发 + 过滤器

1、路由转发:接收一切外界请求,转发到后端的微服务上去;

2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

Spring Cloud Zuul包含了对Hystrix和Ribbon的依赖,下面将一一介绍

二、ribbon 参数配置

提供客户端的负载均衡功能,spring cloud的负载均衡都用到这个库。例如:fegin

它提供了超时重试的功能,配置如下:

ribbon:
ReadTimeout: 2000
ConnectTimeout: 1000
MaxAutoRetries: 1
MaxAutoRetriesNextServer: 1

ribbon.ConnectTimeout:该参数用来设置路由转发请求的时候,创建请求连接的超时时间。若出现路由请求连接超时,会自动进行重试路由请求,如果重试依然失败,Zuul会抛出异常。

ribbon.ReadTimeout:该参数用来设置路由转发请求的超时时间。它的处理与ribbon.ConnectTimeout相似,若出现路由请求连接超时,会自动进行重试路由请求,如果重试依然失败,Zuul会抛出异常。

MaxAutoRetries:最大自动重试次数

MaxAutoRetriesNextServer:最大自动重试下一个服务的次数

总的超时时间 = (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout

如果超时了,但是熔断机制还没有超时,则zuul会异常

三、hystrix 参数配置

提供线程隔离和断路器的自我保护功能

断路器在超时会自动进行熔断,防止因某一服务的故障出现雪崩,可以设置熔断fallback

隔离策略:

  线程隔离
  信号量隔离
隔离策略都是控制线程数量的,只不过是控制的方式不同。 hystrix默认的隔离策略是thread,但是在zuul中,默认的hystrix隔离策略是semaphore

隔离策略和并发设置
隔离策略是THREAD(线程):

设置线程池

hystrix.command.default.execution.isolation.strategy: THREAD
hystrix.threadpool.default.coreSize: 10
hystrix.threadpool.default.maximumSize: 10
hystrix.threadpool.default.maxQueueSize: -1 # 如该值为-1,那么使用的是SynchronousQueue,否则使用的是LinkedBlockingQueue。注意,修改MQ的类型需要重启。例如从-1修改为100,需要重启,因为使用的Queue类型发生了变化

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

隔离策略是SEMAPHORE(信号量)

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

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

超时设置:
用来设置thread和semaphore两种隔离策略的超时时间,默认值是1000。

hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 8000

不设置隔离策略,hystrix的超时也是生效的(我使用的是Hystrix1.4.2)

建议设置这个参数,在Hystrix 1.4.0之前,semaphore-isolated隔离策略是不能超时的,从1.4.0开始semaphore-isolated也支持超时时间了。

建议通过CommandKey设置不同微服务的超时时间,hystrix.command.[CommandKey].execution.isolation.thread.timeoutInMilliseconds

这个超时时间要根据所对应的业务和服务器所能承受的负载来设置,要根据业务的平均响应时间设置,一般是大于平均响应时间的20%~100%,最好是根据压力测试结果来评估,这个值设置太大,会导致线程不够用而会导致太多的任务被fallback;设置太小,一些特殊的慢业务失败率提升,甚至会造成这个业务一直无法成功,在重试机制存在的情况下,反而会加重后端服务压力。

其他的设置:
#强制打开熔断器,如果打开这个开关,那么拒绝所有request

#强制打开熔断器,如果打开这个开关,那么拒绝所有request
hystrix.command.default.circuitBreaker.forceOpen=false

四、 zuul 参数配置

超时设置
如果Zuul使用服务发现,则需要使用ribbon.ReadTimeout和ribbon.SocketTimeout功能区属性配置这些超时。

zuul:
routes:
users:
path: /myusers/**
serviceId: users

如果通过指定URL配置了Zuul路由,则需要使用zuul.host.connect-timeout-millis和zuul.host.socket-timeout-millis。

 zuul:
routes:
users:
path: /myusers/**
url: http://example.com/users_service

这些简单的URL路由不会被执行为HystrixCommand,也不能使用Ribbon对多个URL进行负载平衡。

隔离策略设置

隔离策略:

  线程隔离
  信号量隔离

zuul:
ribbonIsolationStrategy: THREAD

并发设置:
当Zuul的隔离策略为SEMAPHORE时:
设置默认最大信号量:

zuul:
semaphore:
max-semaphores: 100 # 默认值

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

zuul:
eureka:
<commandKey>:
semaphore:
max-semaphores: 100 # 默认值

当Zuul的隔离策略为THREAD时
可为Hystrix配置独立线程池,如果不设置独立线程池,那么HystrixThreadPoolKey 是 RibbonCommand

五、Hystrix仪表盘 不显示线程的解决办法

zuul集成hystrix默认使用的是信号量隔离,不是线程隔离。
zuul.ribbon-isolation-strategy=THREAD 修改为线程隔离方式

【springcloud】Zuul 超时、重试、并发参数设置的更多相关文章

  1. SpringCloud Fegin超时重试源码

    springCloud中最重要的就是微服务之间的调用,因为网络延迟或者调用超时会直接导致程序异常,因此超时的配置及处理就至关重要. 在开发过程中被调用的微服务打断点发现会又多次重试的情况,测试环境有的 ...

  2. zuul超时及重试配置

    配置实例 ##timeout config hystrix: command: default: execution: timeout: enabled: true isolation: thread ...

  3. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  4. springcloud的Zuul配置重试和fallback

    可以参考如下blog: SpringCloud学习03之api服务网关zuul反向代理及重试配置 springCloud学习04之api服务网关zuul回退fallback 注意:重试的开启需要处理幂 ...

  5. SpringCloud Feign 之 超时重试次数探究

    SpringCloud Feign 之 超时重试次数探究 上篇文章,我们对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失 ...

  6. [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。

    背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...

  7. Zuul 超时设置

    问题描述 使用 Zuul 作为网关,偶发超时问题及第一次调用触发熔断问题 解决方案 超时问题 ribbon: ReadTimeout: 10000 SocketTimeout: 60000 第一次调用 ...

  8. HttpClient_使用httpclient必须知道的参数设置及代码写法、存在的风险

    结论: 如果使用httpclient 3.1并发量比较大的项目,最好升级到httpclient4.2.3上,保证并发量大时能抗住.httpclient 4.3.3,目前还有一些bug:还是用4.2.x ...

  9. dubbo超时重试和异常处理

    dubbo超时重试和异常处理 dubbo超时重试和异常处理 参考: https://www.cnblogs.com/ASPNET2008/p/7292472.html https://www.tuic ...

随机推荐

  1. C语言:整数取值范转及溢出

    short.int.long 是C语言中常用的三种整数类型,分别称为短整型.整型.长整型.在现代操作系统中,short.int.long 的长度分别是 2.4.4 或者 8,它们只能存储有限的数值,当 ...

  2. 【记录】如何造一个vite插件(2)

    上一篇已经把vite插件的基础结构搭建起来了,这一次就来聊聊继续完善开发环境. 完善开发环境 生成d.ts文件 先来修改一下lib/index.ts这个文件 export interface user ...

  3. Kubernetes实战:高可用集群的搭建和部署

    摘要:官方只提到了一句"使用负载均衡器将 apiserver 暴露给工作节点",而这恰恰是部署过程中需要解决的重点问题. 本文分享自华为云社区<Kubernetes 高可用集 ...

  4. ArcGis API JS 4.X本地化部署与地图的基础使用

    准备工作 首先下载ArcGIS API for JavaScript4.x,这里下载的是4.19. 官方下载地址:https://developers.arcgis.com/downloads/ ar ...

  5. [考试总结]noip18

    发现之前咕掉了这个考试的总结. 今天就把它给补上. 这也是一个炸裂的一场 开局以为 \(T1\) 可做,然而事实证明我又错了... 莽了一个随机化上去,轻松过了所有样例... 以为稳了 然而挂掉了.. ...

  6. python读取数据写入excel的四种操作

    Python对Excel的读写主要有:xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种 xlutils结合xlrd: 操作的是以xls后缀的excel,读取文件保留原格式 ...

  7. 自制车速记录仪「GitHub 热点速览 v.21.31」

    作者:HelloGitHub-小鱼干 如果你有一辆普通的自行车,那么就可以使用下 X-TRACK 这个项目制作一个自己的测速器,记录你的行驶轨迹还有车速,体验一把硬件发烧友的乐趣.如果你有一个非 ma ...

  8. Intouch/ifix关于语音报警的一种设置思路

    工控项目最近升级改造,需要使用Intouch/ifix提供一个语音报警功能.这个不像先前提供的单一的声音报警,业主方要求能详细的提供某某水泵或者是某某设备故障报警,这就要求我们这边对语音解析或者基础控 ...

  9. 自动部署Springboot项目脚本小脚本

    #!/bin/bash echo '自动部署Springboot项目脚本...' # aaa.jar 项目jar包 pid=`ps -ef|grep aaa.jar|grep -v grep|grep ...

  10. Git 修改历史 commits 中的用户名和邮箱

    一.作用 修改某个仓库历史 commit 的用户 name 和 email 信息. 将历史提交记录中的指定 name/email 修改为新的 name/email. 二.步骤 确认本地全局邮箱/用户名 ...