Mea*_*jay 9 queue laravel laravel-5 laravel-queue
我正在开发一个需要从第三方服务器获取数据的应用程序,并且该服务器每秒最多允许 1 个请求。
现在,所有请求都作为作业发送,我正在尝试实施 Laravel 的“速率限制”以每秒发布 1 个作业,但无法弄清楚为什么应该实施它,并且网络中没有实际示例。
有人实施了吗?
这有什么暗示吗?
我是mxl/laravel-queue-rate-limit Composer 包的作者。
它允许您在不使用 Redis 的情况下对特定队列上的作业进行速率限制。
安装它:
$ composer require mxl/laravel-queue-rate-limit:^1.0
Run Code Online (Sandbox Code Playgroud)这个包与 Laravel 5.5+ 兼容,并使用自动发现功能添加MichaelLedin\LaravelQueueRateLimit\QueueServiceProvider::class到提供者。
将速率限制设置添加到config/queue.php:
'rateLimit' => [
'mail' => [
'allows' => 1,
'every' => 5
]
]
Run Code Online (Sandbox Code Playgroud)
这些设置允许每 5 秒在mail队列上运行 1 个作业。确保默认队列驱动程序(default属性 in config/queue.php)设置为除sync.
使用--queue mail选项运行队列工作器:
$ php artisan queue:work --queue mail
Run Code Online (Sandbox Code Playgroud)
您可以在多个队列上运行 worker,但只有在rateLimit设置中引用的队列才会受到速率限制:
$ php artisan qeueu:work --queue mail,default
Run Code Online (Sandbox Code Playgroud)
default队列上的作业将在没有速率限制的情况下执行。
将一些作业排队以测试速率限制:
SomeJob::dispatch()->onQueue('mail');
SomeJob::dispatch()->onQueue('mail');
SomeJob::dispatch()->onQueue('mail');
SomeJob::dispatch();
Run Code Online (Sandbox Code Playgroud)假设你只有一个工人,你可以这样做:
所以基本上:
doSomething()
$time = microtime(true);
usleep(1000 - ($time - LARAVEL_START));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8322 次 |
| 最近记录: |