博客
关于我
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/

    你可能感兴趣的文章
    MTTR、MTBF、MTTF的大白话理解
    查看>>
    mt_rand
    查看>>
    mysql /*! 50100 ... */ 条件编译
    查看>>
    mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>
    mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
    查看>>
    MySQL 8.0 恢复孤立文件每表ibd文件
    查看>>
    MySQL 8.0开始Group by不再排序
    查看>>
    mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
    查看>>
    multi swiper bug solution
    查看>>
    MySQL Binlog 日志监听与 Spring 集成实战
    查看>>
    MySQL binlog三种模式
    查看>>
    multi-angle cosine and sines
    查看>>
    Mysql Can't connect to MySQL server
    查看>>
    mysql case when 乱码_Mysql CASE WHEN 用法
    查看>>
    Multicast1
    查看>>
    MySQL Cluster 7.0.36 发布
    查看>>
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>