Akka HTTP文件上传遇10秒toStrict超时问题求助(配置调整无效)
问题分析
你遇到的10秒超时错误,根源是Akka HTTP默认将请求实体转为**严格实体(Strict Entity)**的超时时间为10秒,而你当前的配置未覆盖这个参数,仅调整了内容长度、请求超时等其他配置,因此问题未解决。
环境信息
- Scala版本:
2.13.8 - Akka版本:
2.6.19 - Akka HTTP版本:
10.2.9
解决方案
提供两种可行方案,任选其一即可:
方案1:全局配置修改
在Akka配置中添加parsing.to-strict-timeout参数,设置足够长的超时时间(建议与请求超时保持一致):
akka.http { parsing.max-content-length = 1000m parsing.max-to-strict-bytes = 100000m parsing.to-strict-timeout = 1500 seconds # 新增:覆盖默认10秒超时 server.parsing.max-to-strict-bytes = 100000m server.parsing.max-content-length=4096m server.request-timeout = 1500 seconds server.idle-timeout = 1500 seconds client.idle-timeout = 600s client.connecting-timeout = 600s }
方案2:代码中显式指定超时
如果不想全局修改,可在路由中通过toStrictEntity指令单独设置该上传接口的实体转换超时:
import scala.concurrent.duration._ (path("file" / "upload") & post) { formFields("formParams") { formParams => // 显式设置实体转换超时为1500秒 toStrictEntity(1500.seconds) { fileUpload("zip") { case byteSources => val result = uploadTOS3(formParams, byteSources) onSuccess(result){ res => complete(HttpResponse(entity = HttpEntity(ContentTypes.`application/json`, res))) } } } } }
补充说明
fileUpload指令内部依赖将multipart请求转为严格实体,若文件上传速度较慢,默认10秒不足以完成转换就会触发超时。- 若
uploadTOS3方法存在阻塞逻辑,需确保其为异步非阻塞实现,避免间接延长处理时间。
内容的提问来源于stack exchange,提问作者Sky
相关产品推荐
相关产品推荐

