Aliyun OSS Java SDK超时时间设置

Aliyun OSS Java SDK发送一个请求,有5个阶段:
Aliyun OSS Java SDK超时时间设置

阶段Ⅰ

  • 从连接池中获取连接,如果使用的连接已经达到最大连接数,则等待直到有连接释放,或达到最大超时时间,抛出异常ConnectionPoolTimeoutException。如果设置了比较大最大连接数,但是并不想让连接池中真正占用很多连接,SDK会自动关闭闲置时间较长的连接。
  • 最大连接数默认1024个,使用ClientConfiguration.setMaxConnections设置。
    从连接池中获取默认不超时,可以通过ClientConfiguration.setConnectionRequestTimeout设置。默认SDK会关闭闲置超过60秒的连接,可以通过ClientConfiguration.setIdleConnectionTime设置。
  • OSS Java SDK使用连接池,是为了复用连接,减少发送请求时重复建立连接、断开连接的时间,提高服务效率、增强服务器稳定性。

阶段Ⅱ

  • 从连接池中获取的连接,如果尚未建立到OSS连接,则新建。新建连接有超时时间,超时报ConnectionTimeout。如果从连接池中获取的连接已经建立,检查连接闲置时长。如果连接闲置时长没有超过阈值,直接复用连接;如果超过阈值,检测连接有效性,有效继续使用,无效重建连接。
  • 新建连接默认超时时间50秒,可以通过ClientConfiguration.setConnectionTimeout设置。
  • 默认连接闲置时长超过2秒,复用前检查连接是否有效。 闲置连接使用前有效性检查功能在2.1.2前的版本有bug,2.1.2及其后版本修改,原因及问题详见[常见问题]。

阶段Ⅲ

  • 发送请求。请求发送的速度受网络速度的影响。发送请求的超时基于TCP协议栈的超时重传机制,一般不需要设置超时时间,目前也没有提供方法设置。

  • LINUX内核的TCP协议栈重传超时一般是15到30分钟。

阶段Ⅳ

  • 请求发送成功后,等待回复。等待回复是有超时时间的,超时会抛出异常SocketTimeout。等待数据回复超时时间默认50秒,可以通过ClientConfiguration. setSocketTimeout
  • 该参数请根据实际网络情况设置。

阶段Ⅴ

  • 接收数据。如果数据较大,会分多个包传输,收到第N个包后,超时时间内未收到第N+1包在,也会抛出异常SocketTimeout。
    包间隔超时时间与等待数据回复超时时间由参数ClientConfiguration.setSocketTimeout控制 。
  • 该参数请根据实际网络情况设置。

一些应用场景下用户需要控制整个请求的时间,即上面5个阶段的时间总和。如视频直播场景下,上传一个请求是有时效性限制的。OSS Java SDK提供了请求级别的时间设置:

// 需要开启,默认不开启
ClientConfiguration.setRequestTimeoutEnabled(true);
// 设置请求超时,单位毫秒,默认值300秒
ClientConfiguration.setRequestTimeout(300 * 1000);

如果请求超过了设置时间尚未完成,请求失败,抛出异常ClientException。

提示

  • OSS Java SDK超时单位都是毫秒。
上一篇:HBase原理 | 如何确保多步操作的事务性?HBase基础框架级特性Procedure解读


下一篇:python+ueditor+七牛云存储整合