使用google url shortener api,它一直运行良好,直到我开始进行负载测试。很快就开始从谷歌恢复403 Rate Limit Exceeded错误,尽管我注册使用了API,它每天有1000000次点击。我可以在谷歌报告工具上看到请求,他们只是发回403的所有内容。403在API点击345/350次左右开始恢复,已经持续了数小时。
想法?
API将请求限制为每秒/每个用户1个请求。
用户被定义为唯一的IP地址。
因此,如果您从单个IP进行负载测试,这将导致您的速率限制问题。
https://developers.google.com/analytics/devguides/reporting/mcf/v3/limits-quotas#general_api
我不认为doc中所写的"每秒/每个用户1个请求"在我的情况下或在谷歌url shortener的情况下是100%正确的。(仅供参考:我使用的是"公共API访问",而不是"OAuth")
我也有同样的问题,但对我来说,更可能是"我在一段时间内收到了一些URL的错误。"这意味着什么?请继续阅读。
这些是我发现的:
- 我可以使用10个线程同时使用谷歌网址缩短器,但并不总是
- 当处理时,即使一个url在一个线程上失败,其他线程仍然可以获得其他url
- 当一个url失败时,后来我再次尝试相同的url(即使没有其他进程运行,它在一段时间内仍然不起作用。即使我尝试添加更多的字符串,如"&test=1",这也无济于事。但如果我改为另一个url,它会起作用
所以,我猜谷歌的服务器可能有每个url的缓存。如果url失败,它必须等待一段时间才能释放缓存。
所以,我不得不写一些令人毛骨悚然的代码来解决我的问题:
- 当出现故障时,该特定线程将休眠1分钟(是的,1分钟)
- 并持续尝试10次(因此,失败的url可能需要10分钟)
然而,这个令人毛骨悚然的代码适合我的情况,因为我使用的是固定线程池大小为10的ExecutorService。因此,如果失败,其他人仍然可以获得缩短的url。它解决了问题。。。至少对我来说。
您需要转到google shortener扩展,并在选项中选择"Grant Access"
右键单击Extension图标,转到Options,然后单击底部的Grant Access。