对发送通道消息的服务使用URLFetch的SocketTimeoutException



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

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

这种情况只发生在部署的应用程序中,而不是在开发模式中。此外,该调用还没有达到URLFetch允许的60秒(甚至旧的10秒)超时。

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

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

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

  • 任务队列请求的截止时间更长(10分钟,而不是60秒)
  • 如果失败,将重试该任务
  • urlfetch超时时间也更长(10分钟)

最新更新