클라이언트 측 API 호출에 속도 제한을 구현하려고합니다. 15 분마다 동일한 api (10 reqs/초로 제한)를 사용하는 약 20 개의 Symfony2 명령이 있으므로 RabbitMQ를 사용해야하므로 내 프로세스가 메모리가 부족하거나 다음 프로세스가 올바르게 실행되지 않습니다.Symfony2, RabbitMQ 및 Redis 스로틀
api 호출은 명령과 RabbitMQ 작업자에서 실행되므로 RabbitMQ에서도 해당 호출을 제한해야합니다. 저는 근로자가 제 경우에 그런 종류의 일을해서는 안되지만 모든 것을 리펙토링 할 시간이 없다는 것을 알고 있습니다.
그래서 내 RabbitMQ 직원의 모든 명령에 공통적 인 방법을 제한 할 수 있습니까? https://github.com/jaytaph/RateLimitBundle 및 https://github.com/snc/SncRedisBundle (예 : predis 라이브러리 및 Redis가 설치되어 있고 내 시스템에서 실행 중)로 시도하고 있지만 막혔습니다.
요금 제한이 최대치에 도달하면 어떻게 처리해야합니까? 이벤트 리스너가 필요합니까? Redis의 요금 한도를 확인해야합니까?
내 방법이
/**
* @RateLimit(limit=10, period=60)
*/
protected function apiRequest($query)
{
$url = $this->getApiUrl().$query.$this->getUsernameAndApiKey();
echo $url. "\r\n";
$xml = $this->getWithCurl($url);
$xml = simplexml_load_string($xml);
// if ($xml === false) {
// $this->slack->sendMessage($this->getError($url));
// }
if($xml)
return $xml;
}
레디 스의 설정과 같습니다
snc_redis:
clients:
default:
type: predis
alias: default
dsn: redis://localhost
속도 제한 설정 :
이noxlogic_rate_limit:
enabled: true
storage_engine: "redis"
redis_client: default
rate_response_code: 429
rate_response_exception: Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException
display_headers: true
headers:
limit: X-RateLimit-Limit
remaining: X-RateLimit-Remaining
reset: X-RateLimit-Reset