Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SocketTimeoutException使用URLFetch发送通道消息的服务_Java_Google App Engine_Urlfetch_Channel Api_Socket Timeout Exception - Fatal编程技术网

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

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。当我注释掉通道通知行时,没有错误 这只发生在已部署的应用程序中,而不是在开发模式下。此外,调

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

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


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

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

如中所述,您可以使用
setConnectTimeout
setReadTimeout

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

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

如果看不到代码和stacktrace,我们可能无法提供帮助。我准备了一个示例,但我们已经解决了这个问题。我们将请求发送到任务队列,而不是直接通知通道。此队列执行相同的操作,但不返回SocketTimeoutException。在任何情况下,最初的版本都只是一个标准的servlet,最后调用了ChannelServiceFactory.getChannelService().sendMessage。它必须是特定于您的应用程序的东西-绝对不是不可能从一个应用程序到另一个应用程序进行urlfetch的情况!同意。我们经常这样做。只有在接收应用程序中调用通道API时,才会发生错误。