【发布时间】:2015-10-19 12:30:06
【问题描述】:
我在进行突发 api 调用时收到“请求过多”429(代码)错误。
这就是我正在做的事情。
同时发出 39 个请求并等待请求完成。如果收到任何请求的响应,立即提出新的另一个请求。随着任何请求的完成,shopify 存储桶中的请求数量应该会减少,并且应该处理新的请求。但我仍然收到“请求过多”错误。
这里是代码sn-p
// aquire a permit to enter into block
boundedSemaphore.acquire();
// Hit the shopify api
Response response = RestUtils.invoke(URL, operation,
MediaType.APPLICATION_JSON_TYPE, headerMap, queryParameterMap,
MediaType.APPLICATION_JSON_TYPE, signatureMethod);
// Check response
if (!RestUtils.isValidStatusCode(response.getStatus())) {
throw new SystemException("Status :" +response.getStatus());
}
if (response.getHeaderString(X_SHOPIFY_SHOP_API_CALL_LIMIT)
.equalsIgnoreCase("39/40"))
Thread.sleep(10000);
// release permit for other threads to enter
boundedSemaphore.release();
在任何给定时间,我这边的活跃请求都不超过 39 个。
boundedSemaphore 是 java.util.concurrent.Semaphore,最多允许 39 个。一次只有 39 个线程可以进入这个特定的块。完成任何请求后,信号量将释放许可,新线程将获取它并发出新请求。
Shopify 存储桶大小为 40 个请求,泄漏率为每秒 2 个请求,因此任何请求都不应出现“请求过多”错误。
有谁知道这个问题的原因。
【问题讨论】:
-
为什么不等待响应并发送另一个睡眠时间较短的请求?
标签: shopify