Java SocketTimeoutException使用URLFetch发送通道消息的服务
我们有两个AppEngine(Java)应用程序。其中一个使用URLFetch向另一个创建约会。在receiver中,我们添加了一个功能,使用Channel API查看是否有任何打开的通道,并让它们知道新数据 URLFetch调用因SocketTimeoutException而失败。接收器中的所有代码都已执行(包括所有被通知的开放频道),但调用应用程序仍会收到SocketTimeoutException。当我注释掉通道通知行时,没有错误Java SocketTimeoutException使用URLFetch发送通道消息的服务,java,google-app-engine,urlfetch,channel-api,socket-timeout-exception,Java,Google App Engine,Urlfetch,Channel Api,Socket Timeout Exception,我们有两个AppEngine(Java)应用程序。其中一个使用URLFetch向另一个创建约会。在receiver中,我们添加了一个功能,使用Channel API查看是否有任何打开的通道,并让它们知道新数据 URLFetch调用因SocketTimeoutException而失败。接收器中的所有代码都已执行(包括所有被通知的开放频道),但调用应用程序仍会收到SocketTimeoutException。当我注释掉通道通知行时,没有错误 这只发生在已部署的应用程序中,而不是在开发模式下。此外,调
这只发生在已部署的应用程序中,而不是在开发模式下。此外,调用还没有接近URLFetch允许的60秒(甚至旧的10秒)超时。URLFetch的默认截止时间是5秒,因此,如果应用程序加载和执行处理程序的时间超过5秒,它将返回
SocketTimeoutException
如中所述,您可以使用setConnectTimeout
或setReadTimeout
此外,最好将可以延迟的api调用(即不必构建http响应)移动到:
- 任务队列请求的截止时间更长(10分钟,而不是60秒)
- 如果失败,将重试该任务
- urlfetch超时也更长(10分钟)