我正在创建一个通道,用于接收应用程序中用户的更改。主要的问题是,在2-3个网络挂钩之后,我收到一个错误,说用户已经超过配额限制。
这没有任何意义,因为我只收到了2条post消息(我在ngrok上看到的)。
我已经在google控制台上找到了驱动器API和配额。每次我收到一个webhook,查询量就会增加500次。因此,当用户进行了两次更改时,我收到了两个webhook,查询次数超过了google允许的1000次,我就收到了这个错误。
这是我启用通道的代码:
@GET
@Path("/enable")
public void enable(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException {
Credential credential = initFlow().loadCredential("user");
Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
Channel channel = new Channel();
channel.setId(UUID.randomUUID().toString());
channel.setType("web_hook");
channel.setAddress("https://389825dc.ngrok.io/GDriveRest/app/gdrive/webhook");
StartPageToken page = service.changes().getStartPageToken().execute();
GDrive.savedPageToken = page.getStartPageToken();
service.changes().watch(savedPageToken, channel).execute();
}
下面是webhook:
@POST
@Path("/webhook")
public void webhook(@Context HttpServletRequest request, @Context HttpServletResponse response) throws IOException {
Credential credential = initFlow().loadCredential("user");
Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
String pageToken = savedPageToken;
while (pageToken != null) {
ChangeList changes = service.changes().list(pageToken).execute();
for (Change change : changes.getChanges()) {
Log.info("Change found for file: " + change.getFileId());
}
if (changes.getNewStartPageToken() != null) {
savedPageToken = changes.getNewStartPageToken();
}
pageToken = changes.getNewStartPageToken();
}
response.setStatus(200);
}
这是错误:
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "usageLimits",
"message" : "User Rate Limit Exceeded",
"reason" : "userRateLimitExceeded"
} ],
"message" : "User Rate Limit Exceeded"
}
为什么会发生这种情况?
发布于 2017-07-27 18:57:59
代码中有一个错误。我不得不更改以下内容:
PageToken = changes.getNewStartPageToken();
至
pageToken = changes.getNextPageToken();
大量的查询是因为我在每次循环中都会请求一个新的起始页令牌,这迫使了一个无限循环。
https://stackoverflow.com/questions/45324747
复制相似问题