博客
关于我
httpclient超时重试记录
阅读量:211 次
发布时间:2019-02-28

本文共 1022 字,大约阅读时间需要 3 分钟。

Apache HttpClient配置与重试策略分析

背景

在高并发场景下,线上服务依赖第三方服务时,接口响应时间过长的问题经常会影响系统性能。针对我们的场景,接口超时设置为5秒,这意味着如果请求在5秒内未完成,会被认为是超时失败。为了解决这一问题,我们需要合理配置HttpClient的连接池和重试策略。

构造HttpClient

通过debug可以观察到,HttpClient的build方法会返回一个InternalHttpClient对象。默认的执行链是RetryExec,使用DefaultHttpRequestRetryHandler作为重试策略。RetryExec会根据配置的重试策略决定是否重试请求。

超时参数

HttpClient的超时设置通常包括三个维度:

  • 连接超时(setConnectTimeout)
  • 读取超时(setSocketTimeout)
  • 从连接池获取连接超时(setConnectionRequestTimeout)
  • 每个超时参数都需要根据具体场景进行调整。例如,在高并发情况下,连接池的最大连接数和单个路由的最大并发量都需要进行优化。

    重试策略对业务的影响

    默认的HttpClient配置会自动处理重试策略,但在某些情况下,我们需要手动调整或关闭重试功能。重试策略的设置会影响业务的稳定性和性能,因此需要谨慎配置。

    重试分析

    对于HTTP GET和POST请求,重试策略主要基于以下因素:

    • 可重试异常:包括IOException及其子类,但需要排除以下几种情况:

      • InterruptedIOException(线程中断异常)
      • UnknownHostException(找不到主机)
      • ConnectException(连接失败)
      • SSLException(HTTPS认证失败)
    • 重试次数:默认设置会根据请求类型进行调整。例如,GET请求会在socket读取超时时进行3次重试,POST请求则会在write和flush操作失败时进行3次重试。

    禁止重试

    如果某些异常不支持重试,可以在非RetriableClasses列表中添加对应的异常类。例如,线程中断异常会被默认禁止重试。要手动关闭重试策略,可以在HttpClientBuilder中设置自动RetriesDisabled为true。

    参考

    • Apache HttpClient官方文档
    • HttpClient重试策略配置示例
    • 高并发场景下的HTTP客户端优化

    转载地址:http://hrbp.baihongyu.com/

    你可能感兴趣的文章
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    MySQL Join算法与调优白皮书(二)
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    Mysql order by与limit混用陷阱
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    mysql replace用法
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql server has gone away
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>