【问题标题】:Read a large number of emails using Gmail API使用 Gmail API 阅读大量电子邮件
【发布时间】:2015-06-04 06:17:03
【问题描述】:

我正在尝试解析 gmail 帐户中大量电子邮件的内容。我的代码在 Google App Engine 上运行良好,最多可处理 4000 封电子邮件,但当数字更高时出现以下错误

Uncaught exception from servlet com.google.apphosting.runtime.HardDeadlineExceededError

我的示例空间有大约 4500 封电子邮件,下面的代码将花费一分钟多一点的时间来获取所有电子邮件。我希望缩短获取电子邮件的执行时间。

我的代码是:

final List<Message> messages = new ArrayList<Message>();
BatchRequest batchRequest = gmail.batch();

JsonBatchCallback<Message> callback = new JsonBatchCallback<Message>() {
    public void onSuccess(Message message, HttpHeaders responseHeaders) {
        synchronized (messages) {
            messages.add(message);  
        }
    }

    @Override
    public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders)
            throws IOException {
    }
};

int batchCount=0;
if(noOfEmails>0){
    for(Message message : messageList){
        gmail.users().messages().get("me", message.getId()).set("format", "metadata").set("fields", "payload").queue(batchRequest, callback);
        batchCount++;
        if(batchCount==1000){
            try{
                noOfEmailsRead+=batchCount;
                log.info("No of Emails Read : " + noOfEmailsRead);
                batchRequest.execute();
            }
            catch(Exception e){

            }
            batchCount=0;
        }
    }
    noOfEmailsRead+=batchCount;
    log.info("No of Emails Read : " + noOfEmailsRead);
    batchRequest.execute();
}

【问题讨论】:

  • DeadlineExceeded 错误通常表明 Google 的服务器没有足够快地响应您的脚本。提高代码的性能不太可能有太大帮助,但即使有,当 4500 变为 5500 或 6500 时会发生什么?您可能需要采用不同的方法。

标签: java email google-api-java-client gmail-api


【解决方案1】:

正如here所说:RuntimeError

HardDeadlineExceededError

是因为你必须在 30 秒内完成你的任务。


要在大约 30 秒内完成整个任务,您可以使用Divide and Conquer Algorithms。这种技术使用处理器的所有并行能力将任务分解为更小的任务。要确定最佳任务数量,可能有点困难,因为取决于您的操作系统、处理器……您必须进行一些测试和基准测试。

Java 有java.util.concurrent 可以帮助您完成这个问题。您可以使用Fork/Join Framework

【讨论】:

    【解决方案2】:

    您需要将工作分解为较小的任务,每个任务可以在 30 秒内完成。

    一个简单的谷歌搜索就会向你揭示这一点。

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2018-05-11
      • 1970-01-01
      • 2016-03-03
      • 2020-12-19
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      相关资源
      最近更新 更多