You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Java SDK v11.0.1传Blob遇TimeoutException,重启恢复求因

Azure Storage Blob Java SDK v11.0.1 上传超时问题排查

使用Azure Storage Blob SDK for Java v11.0.1向Blob存储上传文件时,每周偶尔出现一次超时错误,导致应用中断,重启后恢复正常。报错信息如下:

java.util.concurrent.TimeoutException: The source did not signal an event for 60 seconds and has been terminated.
2023-03-21T10:30:53.721545956Z at io.reactivex.internal.operators.single.SingleTimeout$TimeoutMainObserver.run(SingleTimeout.java:123) ~[rxjava-2.2.9.jar!/:na]
2023-03-21T10:30:53.721551557Z at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:38) ~[rxjava-2.2.9.jar!/:na]
2023-03-21T10:30:53.721555757Z at io.reactivex.internal.schedulers.ScheduledDirectTask.call(ScheduledDirectTask.java:26) ~[rxjava-2.2.9.jar!/:na]
2023-03-21T10:30:53.721559957Z at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
2023-03-21T10:30:53.721563857Z at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]

可能的原因

  • SDK版本过旧:v11.0.1是较早的版本,后续迭代修复了大量网络超时、连接池管理相关的bug,包括RxJava超时逻辑的优化,旧版本缺乏这些修复,容易在复杂场景下触发超时。
  • 默认超时设置不足:SDK默认60秒的超时阈值,在网络波动、Azure存储服务临时负载过高时,上传请求无法在规定时间内完成,触发RxJava的超时终止逻辑。
  • 连接池资源耗尽:Spring Boot 2.1.6搭配旧版SDK,可能存在连接池未正确回收连接的问题,长期运行后连接池被占满,新的上传请求无法获取可用连接,最终导致超时。
  • 服务端或网络临时故障:Azure存储服务偶尔会出现区域性负载高峰、网络抖动,旧SDK的重试机制不够健壮,无法自动应对这类临时故障,直接触发超时中断。

解决建议

  • 升级SDK版本:优先升级到v11.x系列的最新稳定版(如v11.22.0),该版本修复了大量已知问题;条件允许的话,建议直接迁移到v12版本,其API设计更现代,性能和稳定性更优。
  • 调整超时与重试参数:通过BlobRequestOptions自定义设置更长的超时时间(如setTimeoutIntervalInMs(120000)),同时配置合理的重试策略(如增加重试次数、调整重试间隔)。
  • 优化连接池配置:在Spring Boot中调整HTTP连接池参数,比如设置最大连接数、空闲连接超时时间,确保连接资源能及时回收复用。
  • 添加业务层重试:在上传逻辑中针对TimeoutException添加重试机制,避免单次超时直接导致应用中断,提升系统容错性。

内容的提问来源于stack exchange,提问作者Yatharth Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:30:23