我正在使用Java Gmail API来检索一些邮箱.一旦我获得消息列表,我就会使用收件箱来获取各个消息信息.
示例代码如下:
List<MessageDto> messages = new ArrayList<>();
String nextPageToken = null;
List<Message> batchMessages = new ArrayList<Message>();
ListMessagesResponse response =
gmailClient(googleId)
.users()
.messages()
.list(googleId)
.setQ(query)
.setPageToken(pageToken)
.setMaxResults(maxResults == null ? 50 : maxResults)
.execute();
if (response.getMessages() != null) {
batchMessages.addAll(response.getMessages());
nextPageToken = response.getNextPageToken();
final JsonBatchCallback<Message> callback =
new JsonBatchCallback<Message>() {
public void onSuccess(Message message, HttpHeaders responseHeaders) {
messages.add(MessageMapper.getMessage(googleId, message, false));
}
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) {
log.error("Could not process message ", e);
}
};
BatchRequest batch = gmailClient(googleId).batch();
for (Message message : batchMessages) {
gmailClient(googleId)
.users()
.messages()
.get(googleId, message.getId())
.setFormat("raw")
.queue(batch, callback);
}
batch.execute();
}
我遇到的问题是,由于请求太多并且陷入onFailure方法,并非所有批处理消息都被检索到.
我try 在HttpRequestInitializer
上设置HttpBackOffUnsuccessfulResponseHandler
,但没有起作用.
我在文档中偶然发现了这一点:https://cloud.google.com/java/docs/reference/google-api-client/latest/com.google.api.client.googleapis.batch
有一张纸条写着:
注意:当通过调用设置httpUnsuccessfulResponseTimeout时 httpResource #setUnsuccessfulResponseDeliverable,调用处理程序 每个不成功的部分.因此不建议使用 批量请求上的httpBackOffUnsuccessfulResponseDeliverable,因为 for each 不成功的部分调用回退策略.
我有没有办法处理太多请求异常并重新try 请求?
任何帮助都将不胜感激.