在 Playframework 中忽略 withRequestTimeout
Posted
技术标签:
【中文标题】在 Playframework 中忽略 withRequestTimeout【英文标题】:withRequestTimeout is ignored in Playframework 【发布时间】:2018-10-04 13:34:07 【问题描述】:当我从 playframework 使用 HTTP 客户端时无法设置超时。这是我的代码:
val request: Future[WSResponse] = WS
.url(url)
.withAuth(user, password, WSAuthScheme.BASIC)
//5 minute timeout in milliseconds
.withRequestTimeout(300000)
.put("")
这不会给我一个错误,但请求会在 2 分钟后直接超时。是否需要设置其他内容才能使用超时?
更新:我使用的是 2.4.8 版本的 playframework。貌似这个版本有以下bug:https://github.com/playframework/playframework/issues/4846
但是,建议的修补程序不适合我。
val request: Future[WSResponse] = WS
.url(url)
.asInstanceOf[NingWSRequest]
.copy(requestTimeout = Some(-1))
.withAuth(user, password, WSAuthScheme.BASIC)
.withRequestTimeout(-1)
.put("")
两分钟后都会给我一个超时。
【问题讨论】:
彼得,你想在这里做什么?您想摆脱超时或将其设置为超过两分钟吗? 其实两者都适合我。 【参考方案1】:我不能保证这对你有用,但它似乎对我有用,你可能会适应它:
val httpClient = Try(WS.underlying.asInstanceOf[AsyncHttpClient])
.getOrElse(throw new NotImplementedError("Unsupported HTTP client"))
val putBuilder = httpClient.preparePut(url)
putBuilder.setRequestTimeout(-1).addHeader(user, "Basic " + password)
val promise = Promise[Response]()
httpClient.executeRequest(putBuilder.build(),
new AsyncCompletionHandler[Response]
def onCompleted(response: Response): Response =
promise.success(response)
response
def onThrowable(t: Throwable): Unit =
promise.failure(t)
super.onThrowable(t)
)
祝你好运。
【讨论】:
以上是关于在 Playframework 中忽略 withRequestTimeout的主要内容,如果未能解决你的问题,请参考以下文章