http各种超时配置

这篇具有很好参考价值的文章主要介绍了http各种超时配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. httpclient–请求方浏览器
    connectTimeOut:建立连接时间 三次握手 org.apache.http.conn.HttpHostConnectException: Connect to 1.2.3.4:80 [/1.2.3.4] failed: Connection timed out: connect
    socketTimeOut:链接建立成功后,数据包传输之间时间超时限制,数据包,非此次接口调用时间,一定要设置 否则长时间等待
    java.net.SocketTimeoutException: Read timed out
    connectionRequestTimeOut:从连接池获取连接的超时限制,不常用
  2. nginx–响应方服务器
    client_header_timeout:读取客户端请求头超时时间,默认为60s,如果在此超时时间内客户端没有发送完请求头,则响应408(RequestTime-out)
    client_body_timeout:同上
    send_timeout
    keepalive_timeout timeout [header_timeout]:关联httpclient连接池 重要:设置HTTP长连接超时时间,其中,第一个参数timeout是告诉Nginx长连接超时时间是多少,默认为75s。第二个参数header_timeout是用于设置响应头“Keep-Alive: timeout=time”,即告知客户端长连接超时时间。两个参数可以不一样,“Keep-Alive:timeout=time”响应头可以在Mozilla和Konqueror系列浏览器起作用,而MSIE长连接默认大约为60s,而不会使用“Keep-Alive: timeout=time”。如Httpclient框架会使用“Keep-Alive: timeout=time”响应头的超时(如果不设置默认,则认为是永久)。如果timeout设置为0,则表示禁用长连接。
    还有各种转发超时
  3. Spring Cloud各个框架超时配置
    feign :default或feignName或contextId:feign 作为最前端暴露给用户使用的,一般其超时设置相当于对用户的一个承诺,所以Spring在处理这一块的时候,会有意识地使用feign的超时时间来设置后面的ribbon 和http client组件。需要注意的是:hystrix的超时处理和feign之间在当前的Spring Cloud框架规划中,并没有相关关系。
    feign.client.config.default.connectTimeout:网络连接
    feign.client.config.default.readTimeout:数据读取
    hystrix :Hystrix的超时设置,在于命令执行的时间,一般而言,这个时间要稍微比Feign的超时时间稍微长些,因为Command除了请求调用之外,还有一些业务代码消耗。Hystrix的超时时间是站在命令执行时间来看的,和Feign设置的超时时间在设置上并没有关联关系。Hystrix不仅仅可以封装Http调用,还可以封装任意的代码执行片段。Hystrix是从命令对象的角度去定义,某个命令执行的超时时间,超过此此时间,命令将会直接熔断。假设hystrix 的默认超时时间设置了10000,即10秒,而feign 设置的是20秒,那么Hystrix会在10秒到来是直接熔断返回,不会等到feign的20秒执行结束,也不会中断尚未执行完的feign调用。
    hystrix.command.default.execution.isolation.strategy = THREAD
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 10000
    hystrix.command.default.execution.timeout.enabled = true
    hystrix.command.default.execution.isolation.thread.interruptOnTimeout = true
    hystrix.command.default.execution.isolation.thread.interruptOnFutureCancel = false
    ribbon :当feign设置了超时时间,Ribbon会依据feign的设置同步。Ribbon的这个超时时间,用于指导真正调用接口时,设置真正实现者的超时时间。Ribbon和Feign是相对独立的组件,在一个Spring Cloud框架运行环境中,可以没有Feign。那么,在这种场景下,假设Http Client客户端使用的是OKHttp,并且通过ribbon.okhttp.enabled 指定ribbon调用时,会使用ribbon的超时配置来初始化OkHttp.为了保证整个组件调用链的超时关系,一般Spring Cloud采取的策略是:依赖方的超时配置覆盖被依赖方的配置。当然这个也不是绝对的,实际上对于Feign而言,可以直接指定Feign和HttpClient之间的配置关系
    feign.httpclient.maxConnections = 200http //client最大连接数,默认200
    feign.httpclient.maxConnectionsPerRoute= 50 //每个IP路由最大连接数量
    feign.httpclient.timeToLive = 900 //连接存活时间
    feign.httpclient.timeToLiveUnit = SECONDS //连接存活时间单位
    feign.httpclient.connectionTimeout = 2000 //连接超时时间
    fein.httpclient.connectionTimeout=3000 //连接超时定时器的执行频率
    Hystrix的超时时间和Feign或者Http Client的超时时间关系
    Hystrix的超时意义是从代码执行时间层面控制超时;而Feign或Http Client 则是通过Http底层TCP/IP的偏网络层层面控制的超时。
    建议是:一般情况下,Hystrix 的超时时间要大于Feign或Http Client的超时时间;而对于特殊需求的接口调用上,为了避免等待时间太长,需要将对应的Hystrix command 超时时间配置的偏小一点,满足业务侧的要求。
    zuul
    zuul.host.socket-timeout-millis=2000 #默认1000
    zuul.host.connect-timeout-millis=4000 #默认2000

others
#断路器详细设置
#当在配置时间窗口内达到此数量的失败后,进行短路。默认20个)
#hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#短路多久以后开始尝试是否恢复,默认5s)
#hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5
#出错百分比阈值,当达到此阈值后,开始短路。默认50%)
#hystrix.command.default.circuitBreaker.errorThresholdPercentage=50%
#重试机制
#该参数用来开启重试机制,默认是关闭
spring.cloud.loadbalancer.retry.enabled=true
#对所有操作请求都进行重试
ribbon.OkToRetryOnAllOperations=true
#对当前实例的重试次数
ribbon.MaxAutoRetries=1
#切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=1
#根据如上配置,当访问到故障请求的时候,它会再尝试访问一次当前实例(次数由MaxAutoRetries配置),如果不行,就换一个实例进行访问,如果还是不行,再换一次实例访问(更换次数由MaxAutoRetriesNextServer配置),
zuul请求也是通过Ribbon负载均衡客户端去调用其他服务的,ribbon客户端默认是用HttpClient来发起http请求调用,ribbon内部又会构造hystrix command来执行请求(所以我们常说ribbon的超时时间设置要大于等于hystrix 超时时间,不然导致command还没执行完,ribbon却超时了)

feign调用原理
http请求设置超时时间,http,java,nginx

http请求设置超时时间,http,java,nginx

Ribbon有哪些负载均衡策略:
轮询策略
权重策略
随机策略
最小连接数策略
重试策略
可用性敏感策略
区域敏感策略

Feign和Ribbon的重试机制相当于一个双层循环,feign重试机制在外层,Ribbon的重试机制在里层,每执行一次feign的重试机制,内层的Ribbon的重试机制都会全部执行一次。Feign和OpenFeign的底层就是Ribbon,所以当项目使用了Feign或OpenFeign的重试机制,就不要开启Ribbon的重试机制,反之亦然。否则重试配置重叠,实际重试次数是二者的笛卡尔积。

ribbon的重试机制是使用RequestSpecificRetryHandler和LoadBalancerCommand来处理的,我们可以在配置文件定义参数,Spring框架会自动帮我们加载到RequestSpecificRetryHandler和LoadBalancerCommand的属性中去

feign的重试机制的实现类是Retryer,他的核心参数含义如下:
maxAttempts-最大尝试次数,默认值为5,首次请求也算一次,请求1次,重试4次。
period;-初始时间,用于参与计算线程休眠时间。
maxPeriod;-线程休眠的单次最大时间上限。
attempt;-尝试次数,每次尝试+1。
sleptForMillis;-线程累计休眠总时间。

Spring Cloud组件那么多超时设置,我们如何理解和运用?文章来源地址https://www.toymoban.com/news/detail-782107.html

到了这里,关于http各种超时配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • http各种超时配置

    httpclient– 请求方浏览器 connectTimeOut :建立连接时间 三次握手 org.apache.http.conn.HttpHostConnectException: Connect to 1.2.3.4:80 [/1.2.3.4] failed: Connection timed out: connect socketTimeOut :链接建立成功后,数据包传输之间时间超时限制,数据包,非此次接口调用时间,一定要设置 否则长时间等待

    2024年02月02日
    浏览(27)
  • Axios设置请求超时时间 timeout

    1.axios全局设置网络超时 2. 单独对某个请求设置网络超时 3.webpack的dev的proxyTable的超时时间设置

    2024年04月10日
    浏览(36)
  • golang 通过context设置接口请求超时时间

    下面是直接可应用的实例:

    2024年02月10日
    浏览(33)
  • 解锁新技能RestTemplate设置全局、单个请求超时时间及支持https请求

    springboot请求第三方接口时会用到RestTemplate,其底层实现逻辑默认是通过SimpleClientHttpRequestFactory来实现,具体由socket连接来实现;可以替换其默认实现为HttpComponentsClientHttpRequestFactory。 一、自定义RestTemplate实例对象 二、RestTemplate自定义全局超时时间 三、RestTemplate设置单个请求

    2023年04月09日
    浏览(30)
  • Springboot调整接口响应返回时长详解(解决响应超时问题)_springboot设置请求超时时间

    1、配置Http会话超时 可以通过两种方式为Spring Boot应用程序 配置HTTP会话超时 。 1.1 application.properties中配置会话超时 最简单的方法是在你的application.properties中加入参数 server.servlet.session.timeout 。 还要注意的是, Tomcat不允许你将超时时间设置得少于60秒 。 1.2 以程序方式配置会

    2024年04月27日
    浏览(51)
  • axios 统一配置请求超时时间

    你可以通过配置 axios 的实例来统一设置请求的超时时间。以下是一个示例: 首先,安装 axios(如果还没有安装): 然后,在你的 Vue 项目中,你可以创建一个 axios 的实例,并设置默认的超时时间,然后将它应用到所有的请求。例如,你可以在项目的某个地方(例如 main.js )

    2024年02月03日
    浏览(27)
  • Feign、Ribbon、Hystrix(铁三角)以及三者超时时间配置 Feign 如何设置超时时间(connectionTimeout、readTimout

    在微服务架构中很多功能都需要调用多个服务才能完成某一项功能,一个成熟的微服务集群,内部调用必然依赖一个好的 RPC 框架,比如:基于 Http 协议的  Feign ,基于私有 tcp 协议的  Dubbo   1. Feign 是什么 Feign 是Spring Cloud Netflix组件中的轻量级Restful的 HTTP 服务客户端,实现

    2024年02月11日
    浏览(26)
  • springboot配置http连接超时时间主动断开避免产生大量close_wait

    与客户端联调接口,通信方式使用http连接,客户端设置了发起请求后10s就断开连接,然后果不其然,我在服务端这边收到了大量的close_wait状态,最终导致接口不可用。 close_wait产生的原因就是客户端断开了连接但是没有发FIN给到服务端,所以服务端不知道还一直在跟客户端通

    2024年02月16日
    浏览(45)
  • nginx配置http请求转成https请求

    1、return 301 2、rewitre 3、error_page 原理: http和https是tcp的上层协议,当nginx服务器建立tcp连接后,根据收到的第一份数据来确定客户端是希望建立tls还是http。nginx会判断tcp请求的首写节内容以进行区分,如果是0x80或者0x16就可能是ssl或者tls,然后尝试https握手。如果端口开启了

    2024年02月07日
    浏览(32)
  • 【nginx】配置将HTTPS请求转换成HTTP

    要将HTTPS请求转换为HTTP请求,可以在Nginx的配置文件中添加以下配置: 打开Nginx的配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf 。 在 server 块中添加以下配置,将HTTPS请求转发到后端的HTTP服务: 将 yourdomain.com 替换为你的域名, /path/to/your/ssl_certificate.crt 和

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包