我需要使用 Java 和 Google 日历 API 在 Google 帐户上创建多达 130 个日历,但不断获取
“403:超出速率限制”。
我试过的:
- 使用 service.insert(calendar).execute() 循环;-> 结果:插入 25 次后我收到错误 403(奇怪的是,这似乎是旧的限制,根据:https ://support.google.com/a/answer/2905486?hl=en 应该是 60 )
- 每个请求之间的延迟循环(最多 60 秒)-> 结果:没有改变结果。插入 25 次后仍然为 403(在其关于指数退避的文档中,谷歌只讨论了几秒钟,所以我应该认为 1 整分钟就足够了,即使我没有以指数方式增加延迟)。
-请求批处理(遵循此Google 示例代码)-> 结果:在大约 10 次回调之后,响应落入 onFailure 方法中......你猜对了 403 状态代码。
我认为我大部分时间都在我的(最大化)API 配额内。经过几次测试,我只看到过一次“quotaExceeded”。
批量请求样本:
batch = this.service.batch();
JsonBatchCallback<Calendar> callback = new JsonBatchCallback<Calendar>(){
@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws HttpResponseException{
log.debug(e);
throw new HttpResponseException(Integer.valueOf(e.get("code").toString()), e.getMessage());
}
@Override
public void onSuccess(Calendar cal, HttpHeaders responseHeaders) {
log.debug("Calendrier créé pour " + cal.getSummary());
}
};
for( String user : usernameList ) {
cal = new Calendar().setSummary(user);
this.service.calendars().insert(cal).queue(batch, callback);
}
batch.execute();