Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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
Php Symfony/GuzzleHttp:限制跨多个使用者/实例的API调用_Php_Symfony_Limit_Guzzle - Fatal编程技术网

Php Symfony/GuzzleHttp:限制跨多个使用者/实例的API调用

Php Symfony/GuzzleHttp:限制跨多个使用者/实例的API调用,php,symfony,limit,guzzle,Php,Symfony,Limit,Guzzle,我在一个项目上工作了一段时间,该项目从API获取数据,并在本地处理这些数据以供各种用途。目前,使用者从消息队列中提取JSON对象,用于触发匹配的Symfony命令。速率限制内置于这一个消费者,非常简单,可以根据API的状态响应自动进行调整。问题是,它的设置方式无法并行运行,如果API上的版本化静态数据有重大更新,则在缓存新静态数据时,所有处理都会停止 我研究了如何使用rabbitmq捆绑包Symfony捆绑包,并将命令转换为具有自己通道的独立使用者,以便它们可以并行运行,不再相互阻塞,但是,这带

我在一个项目上工作了一段时间,该项目从API获取数据,并在本地处理这些数据以供各种用途。目前,使用者从消息队列中提取JSON对象,用于触发匹配的Symfony命令。速率限制内置于这一个消费者,非常简单,可以根据API的状态响应自动进行调整。问题是,它的设置方式无法并行运行,如果API上的版本化静态数据有重大更新,则在缓存新静态数据时,所有处理都会停止

我研究了如何使用
rabbitmq捆绑包
Symfony捆绑包,并将命令转换为具有自己通道的独立使用者,以便它们可以并行运行,不再相互阻塞,但是,这带来了一些我一直无法解决的问题

首先,我仍然需要设法限制所有使用者之间的API调用。我有一个Guzzle的包装器,理论上,它可以使用一个简单的文件来管理它的所有实例的调用数量。我查看了一个现有的令牌桶库,但将其设置为在Symfony中工作似乎有问题,因为如果消费者重新启动,每个消费者都可能重置令牌的数量,因此。。。我不知道该去哪里

第二个问题是,一些用户可能会访问主API中的数据,但我们仍然没有与之匹配的静态数据版本。如果发生这种情况,它需要触发相关的使用者,但前提是每个队列中还没有触发器。。。我可以看到的可能解决方案是,在发布消息时,将请求的最新版本记录在一个文件中以进行更新,并让消费者等待数据在本地可用。再一次,我有点迷失了如何最好地处理这个问题