Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shopify ShopifAPI:调用限制_Shopify - Fatal编程技术网

Shopify ShopifAPI:调用限制

Shopify ShopifAPI:调用限制,shopify,Shopify,我在进行突发api调用时收到“太多请求”429(代码)错误 这就是我正在做的 同时发出39个请求并等待请求完成。如果收到任何请求的响应,立即提出新的请求。随着任何请求的完成,shopify bucket中的请求数量应该减少,新提出的请求应该得到处理。但我仍然收到“太多请求”错误 下面是代码片段 // aquire a permit to enter into block boundedSemaphore.acquire(); // Hit the shopify api

我在进行突发api调用时收到“太多请求”429(代码)错误

这就是我正在做的

同时发出39个请求并等待请求完成。如果收到任何请求的响应,立即提出新的请求。随着任何请求的完成,shopify bucket中的请求数量应该减少,新提出的请求应该得到处理。但我仍然收到“太多请求”错误

下面是代码片段

    // 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 bucket size是40个请求,泄漏率为每秒2个请求,因此请求不会因“请求太多”错误而跳闸


有人知道这个问题的原因吗。

我想你可能误解了Shopify的请求限制算法。它们将最大请求速率限制为每秒2个请求,最多可突发40个请求。您发送的每个请求都会增加“bucket”中的调用数,并且每1/2秒就会使bucket中的一个调用过期。这与Shopify API是否响应无关。例如,您可以立即突发40个请求,但在发送下一个请求之前,您必须等待至少1/2秒。他们只是查看自上次请求以来经过的时间,而不是连接是否仍然打开

我还看到您有一个
Thread.sleep()
调用,但只有当
X\u SHOPIFY\u SHOP\u API\u call\u LIMIT
头等于39/40时才有。有两个潜在问题:

  • 首先,此睡眠仅在报头返回“39/40”时触发。只有一个线程会休眠,但另一对线程可能会立即进行其他调用并接收“40/40”或得到429返回码,在这些情况下,您将永远不会休眠

  • 其次,确保
    X\u SHOPIFY\u SHOP\u API\u CALL\u LIMIT
    等于“X-SHOPIFY-SHOP-API-CALL-LIMIT”,并且您从SHOPIFY收到的头文件实际上与此匹配


我认为您可能误解了Shopify的请求限制算法。它们将最大请求速率限制为每秒2个请求,最多可突发40个请求。您发送的每个请求都会增加“bucket”中的调用数,并且每1/2秒就会使bucket中的一个调用过期。这与Shopify API是否响应无关。例如,您可以立即突发40个请求,但在发送下一个请求之前,您必须等待至少1/2秒。他们只是查看自上次请求以来经过的时间,而不是连接是否仍然打开

我还看到您有一个
Thread.sleep()
调用,但只有当
X\u SHOPIFY\u SHOP\u API\u call\u LIMIT
头等于39/40时才有。有两个潜在问题:

  • 首先,此睡眠仅在报头返回“39/40”时触发。只有一个线程会休眠,但另一对线程可能会立即进行其他调用并接收“40/40”或得到429返回码,在这些情况下,您将永远不会休眠

  • 其次,确保
    X\u SHOPIFY\u SHOP\u API\u CALL\u LIMIT
    等于“X-SHOPIFY-SHOP-API-CALL-LIMIT”,并且您从SHOPIFY收到的头文件实际上与此匹配


我认为您可能误解了Shopify的请求限制算法。它们将最大请求速率限制为每秒2个请求,最多可突发40个请求。您发送的每个请求都会增加“bucket”中的调用数,并且每1/2秒就会使bucket中的一个调用过期。这与Shopify API是否响应无关。例如,您可以立即突发40个请求,但在发送下一个请求之前,您必须等待至少1/2秒。他们只是查看自上次请求以来经过的时间,而不是连接是否仍然打开

我还看到您有一个
Thread.sleep()
调用,但只有当
X\u SHOPIFY\u SHOP\u API\u call\u LIMIT
头等于39/40时才有。有两个潜在问题:

  • 首先,此睡眠仅在报头返回“39/40”时触发。只有一个线程会休眠,但另一对线程可能会立即进行其他调用并接收“40/40”或得到429返回码,在这些情况下,您将永远不会休眠

  • 其次,确保
    X\u SHOPIFY\u SHOP\u API\u CALL\u LIMIT
    等于“X-SHOPIFY-SHOP-API-CALL-LIMIT”,并且您从SHOPIFY收到的头文件实际上与此匹配


我认为您可能误解了Shopify的请求限制算法。它们将最大请求速率限制为每秒2个请求,最多可突发40个请求。您发送的每个请求都会增加“bucket”中的调用数,并且每1/2秒就会使bucket中的一个调用过期。这与Shopify API是否响应无关。例如,您可以立即突发40个请求,但在发送下一个请求之前,您必须等待至少1/2秒。他们只是查看自上次请求以来经过的时间,而不是连接是否仍然打开

我还看到您有一个
Thread.sleep()
调用,但只有当
X\u SHOPIFY\u SHOP\u API\u call\u LIMIT
头等于39/40时才有。有两个潜在问题:

  • 首先,此睡眠仅在报头返回“39/40”时触发。只有这一个线程会休眠,但另外两个线程可能会立即休眠