Если вы ограничиваете одновременными запросами, тогда применяется первая часть этого ответа. Если вы хотите ограничить количество запросов в секунду, то бит в конце применяется. Вопрос типа спрашивает обе вещи.
Если я правильно понял, у вас есть несколько потоков (либо как запросы CF обрабатываются, либо создаются сами потоки CF), которые все должны совершать вызовы в тот же самый ограниченный скоростью домен. Что вам нужно - это центральный способ координирования доступа в сочетании с хорошим способом управления выполнением программы.
Я не знаю каких-либо родственных пределов, которые могут поддерживать CF (я был бы счастлив, если бы ошибался), поэтому вам, вероятно, придется реализовать свои собственные. Недорогой способ сделать это - увеличить и уменьшить переменную allowed_conenctions
в долговечном объеме, таком как приложение. Недостатком является то, что вам нужно внедрить проверку повсюду и что, если нет свободных соединений, вам придется как-то подождать.
Действительно, у вас есть resource poo l (разрешенных HTTP-соединений), и я предполагаю, что вы хотите, чтобы ваш код дождался, пока соединение будет бесплатным. CF делает это уже для соединений с базой данных.
В вашем случае нет необходимости хранить что-либо в пуле (поскольку HTTP-соединения не долговечны), за исключением разрешения на использование ресурса. Java предоставляет класс, который должен предоставить то, что вам нужно, Semaphore.
Я не пробовал, но в теории, что-то вроде сниппета ниже должно работать:
//Application.cfc:onApplicationStart()
application.http_pool = CreateObject("java","java.util.concurrent.Semaphore").init(3)
//Meanwhile, elsewhere in your code
application.http_pool.acquire()
//Make my HTTP call
application.http_pool.release()
Вы можете даже обернуть объект HTTP, чтобы обеспечить эту функциональность без использования приобретаемой/релиз каждый времени, что сделает его более надежным.
EDIT Это вы хотите ограничить тарифы, посмотрите на guava, который имеет тот же общий интерфейс, что и Семафор, но реализует ограничение скорости для вас. Вам нужно будет добавить guava в classpath ColdFusion или использовать JavaLoader или использовать CF10, который имеет встроенные средства загрузки классов.
Я хотел бы начать с того, чтобы сделать так много запросов, которые действительно необходимы. Если это не так, вы можете просто сделать cfhttp, за которым следует 1-й сон внутри цикла. –
Чем больше запросов я могу сделать как можно быстрее, тем эффективнее будет приложение. Проблема, с которой я столкнулась во сне, заключается в том, что вызовы cfhttp все еще могут стоять в очереди, а затем несколько запросов, в то же время приводя к превышению порогового значения. – CPB07
Вы используете _standard_ или _enterprise_ издание ColdFusion? –