我正試圖解析gmail帳戶中大量電子郵件的內容。我的代碼工作正常,在谷歌應用程序引擎高達〜4000級的郵件,但我得到以下錯誤,當數越高使用Gmail API閱讀大量電子郵件
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時會發生什麼?您可能需要採用不同的方法。 – 2015-03-31 02:41:01