Google App Engine:URLFetch最长超时距离任务250秒,而不是600秒(10分钟)

时间:2012-12-24 01:34:52

标签: java google-app-engine urlfetch

根据官方文档,如果从任务发出,则通过Google App Engine上的URLFetch发出的http请求超时为10分钟:

https://developers.google.com/appengine/docs/java/urlfetch/overview#Quotas_and_Limits

不幸的是,无论什么

,我都会遇到250秒(4分10秒)的超时

我已经设置了在Apache上运行的简单的php测试脚本(但我也用Lighttpd测试过),我正在从GAE调用,等待300秒然后返回

Http hook:

echo "Starting to wait\n";

$waited = 0;
while($waited < 300) {
  sleep(5);
  $waited += 5;
  echo "Waited so far $waited seconds\n";
}

echo "all done\n";

约250秒后呼叫始终失败,并在GAE日志中抛出以下错误

IOException : Could not fetch URL ...

甚至不是与超时相关的异常

另一方面,Web服务器使用http返回码200

记录成功的呼叫

我用来拨打电话的Java代码如下

HTTPRequest httpReq = new HTTPRequest(new URL(http://example.com/very-slow.php),  HTTPMethod.GET, FetchOptions.Builder.allowTruncate().doNotValidateCertificate().setDeadline(3600d));

HTTPResponse resp = null;

try {
Future<HTTPResponse> futureResp = urlService.fetchAsync(httpReq);

log.info("Aync Call request lodged, waiting for a response");

resp = futureResp.get();

log.info("Aync Call completed");

} catch(Throwable th) {
log.warning("URLFetch execution error: " + th.getMessage());
}

我尝试过使用setDeadline方法来指定各种不同的值而没有太多运气。如果我指定的值低于250秒,则使用它并抛出超时异常。忽略250秒以上的任何内容,而是抛出通用的IOException。

我很确定这看起来像是一个GAE错误,在查看谷歌代码上的错误列表后,我惊恐地发现有多少未解决的错误正在等待多年......

Google App Engine在此阶段非常失望......

更新

  1. 仅生产环境受到影响。在开发服务器上我没有遇到任何问题。虽然...
  2. 通常不会在开发服务器上强制实施超时
  3. 我尝试过同步和异步URLFetch方法:结果相同。
  4. 我尝试过使用低级GAE专有URLFetch或java.net URLConnection对象:结果相同

0 个答案:

没有答案