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

时间:2012-01-13 01:56:03

标签: java google-app-engine urlfetch channel-api socket-timeout-exception

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

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

仅在已部署的应用中发生,而不是在开发模式下。此外,该呼叫未接近达到URLFetch允许的60秒(甚至是旧的10秒)超时。

1 个答案:

答案 0 :(得分:0)

urlfetch的默认截止时间是5秒,因此如果您的应用程序加载并执行处理程序需要5秒以上,它将返回SocketTimeoutException

documentation所述,您可以使用setConnectTimeoutsetReadTimeout

为您的urlfetch电话设置更长的截止日期

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

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