【问题标题】:Symfony2, RabbitMQ and Redis throttlingSymfony2、RabbitMQ 和 Redis 节流
【发布时间】:2017-02-14 00:30:09
【问题描述】:

我正在尝试对我的客户端 api 调用实施速率限制。由于每 15 分钟大约有 20 个 Symfony2 命令使用相同的 api(限制为 10 个请求/秒),因此我需要使用 RabbitMQ,因此我的进程不会耗尽内存或阻止下一个进程正确执行。

由于 api 调用是在命令和 RabbitMQ 工作人员中执行的,我也需要在 RabbitMQ 中限制它们。我知道在我的情况下工人不应该做那种工作,但我没有时间重构整个事情。

那么,是否可以限制我的 RabbitMQ 工作程序中所有这些命令通用的方法?我正在尝试使用 https://github.com/jaytaph/RateLimitBundlehttps://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;

    }

Redis 配置:

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

【问题讨论】:

    标签: symfony redis rabbitmq throttling


    【解决方案1】:

    只需使用INCRBY Redis 命令(https://redis.io/commands/incrby)。命令的响应将是递增后的值,因此在代码中您可以将此值与您的限制进行比较,如下所示:

    $counter = $redis->increment($key);
    if ($counter > $limit) {
        //deny logic here
    }
    

    由于 Redis 的单线程原子性质,它可以处理许多同时处理的请求,因此不会处理超过 $limit 个请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-19
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多