Похоже, что реагирование на вызовы API не так уж важно, так как вы говорите об очередях. Если это так, я бы поместил URL-адрес запроса API в таблицу базы данных. Затем с помощью фонового рабочего процесса я бы сделал что-то для этого:
set_time_limit(0);
$api_requests = array();
while (TRUE)
{
if (count($api_requests) == 0)
{
// get multiple records from DB to limit requests and add
// to the $api_requests array.
// if DB returns no results, maybe sleep a few extra seconds
// to avoid "slamming" the database.
}
// get the next API request from the array
$request = array_shift($api_requests);
// send API request to Blekko
// process API results
// sleep 1 sec
sleep(1);
}
Это немного «занятый» цикл, но он гарантирует, что вы никогда не будете запускать более одного запроса в секунду, а также гарантирует, что запрос в очереди не будет ждать слишком долго для обработки.
Примечание: Этот метод требует, чтобы ваш сервер не убивал сам процесс, независимо от вызова set_time_limit (). Длительные процессы часто уничтожаются на общих серверах.