3

我们有两个 AppEngine (Java) 应用程序。其中一个使用 URLFetch 到另一个来创建约会。在接收器中,我们添加了一个功能,我们使用 Channel API 查看是否有任何打开的通道并让他们知道新数据。

URLFetch 调用失败并出现 SocketTimeoutException。接收器中的所有代码都已执行(包括通知所有打开的通道),但调用应用程序仍会收到 SocketTimeoutException。当我注释掉频道通知行时,没有错误。

这只发生在已部署的应用程序中,而不是在开发模式下。此外,调用不会接近 URLFetch 允许的 60 秒(甚至旧的 10 秒)超时。

4

1 回答 1

0

urlfetch 的默认截止时间是 5 秒,因此如果您的应用程序加载和执行处理程序的时间超过 5 秒,它将返回一个SocketTimeoutException.

文档setConnectTimeout中所述,您可以使用或为您的 urlfetch 调用设置更长的截止日期setReadTimeout

此外,将可以延迟的 api 调用(即不需要构建 http 响应)移动到任务队列是一个好主意:

  • 任务队列请求的截止时间更长(10分钟,而不是60秒)
  • 如果失败,任务将重试
  • urlfetch 超时时间也更长(10 分钟)
于 2012-06-07T02:54:23.513 回答