java - 我应该如何编写 URLFetch 以避免超时异常? GAE/J + Facebook 应用程序

标签 java google-app-engine facebook-graph-api urlfetch

功能很简单:

public static String readURL(URL url, HTTPMethod method) throws IOException {
    FetchOptions opt = FetchOptions.Builder.doNotValidateCertificate();
    HTTPRequest request = new HTTPRequest (url, method, opt);
    URLFetchService service = URLFetchServiceFactory.getURLFetchService();
    HTTPResponse response = service.fetch(request);
    byte[] content = response.getContent();
    return new String(content);
}

问题是我偶尔会遇到异常:

java.lang.RuntimeException: java.io.IOException: Timeout while fetching: https://graph.facebook.com...

我想做的是某个 while() 循环或类似的函数,这样它就会不断尝试,直到有响应。您认为最好的方法是什么?我正在朝着正确的方向前进,还是您会提出完全不同的建议?正如其他一些帖子中建议的那样,将超时增加到 10 秒应该可以避免大多数问题,但不能根除问题。

谢谢。


PS 1: 需要使用 FetchOptions opt = FetchOptions.Builder.doNotValidateCertificate(); 行来避免另一个问题,

HTTP ERROR 500
Problem accessing /auth. Reason:
javax.net.ssl.SSLHandshakeException: Could not verify SSL certificate for: https://graph.facebook.com/oauth/access_token?...
PS 2: 这不是这个线程中的问题:GoogleAppEngine urlfetch timeout exception因为我正在获取 facebook 服务器,而不是我自己的服务器。也不像 "Timeout while fetching" URLFetch GAE/J因为问题不是一个非常大的提要,而是一个无响应的服务器(在响应测试用户的请求时特别慢)

最佳答案

首先,将 urlfetch 超时增加到10 秒,这将在减少引发的超时异常方面产生巨大的差异。

我会尝试第一次从 Web 处理程序下载 facebook 数据,如果出现超时异常,我会将任务移至 TaskQueue .

进入任务队列后,如果引发超时异常并且任务失败,App Engine 会自动重试,尝试下载 Url 的内容,直到成功为止。

import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import static com.google.appengine.api.taskqueue.TaskOptions.Builder.*;

        Queue downloadqueue = QueueFactory.getDefaultQueue();
        queue.add(withUrl("/worker").param("url", urlToFetch))

关于java - 我应该如何编写 URLFetch 以避免超时异常? GAE/J + Facebook 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5360702/

相关文章:

java - 将 SAP netweaver 7.0 项目迁移到 7.4

java - JSP 2 和 Servlet 2.4 破坏了我的自定义标签

java - 需要帮助创建 JPA 条件查询

java - 无法在电子邮件验证时回滚 java appengine 事务

ios - Facebook iOS SDK - 在 Graph API v2.4 中获取好友列表

Facebook广告,将客户页面添加到业务经理

ios - Facebook iOS presentRequestsDialogModallyWithSession 返回选择的好友

java - 为什么我的 OnClickListener 无法工作?为什么 Eclipse 中的这段代码 fragment 会给出 "ClassHeader expected instead"?

python - 如何从代码中检查当前实例的内存使用情况

google-app-engine - 用于存储大量事件的 Google Bigtable 与 BigQuery