Simple Laravel queue rate limiting
3.* versions are compatible only with Laravel 7+.
$ composer require mxl/laravel-queue-rate-limit
For Laravel 6 use 2.* versions:
$ composer require mxl/laravel-queue-rate-limit "^2.0"
For Laravel 5 use 1.* versions:
$ composer require mxl/laravel-queue-rate-limit "^1.0"
Laravel 5.5+ will use the auto-discovery feature to add MichaelLedin\LaravelQueueRateLimit\QueueServiceProvider::class
to providers.
This package is not compatible with older Laravel versions.
Add rate limits to config/queue.php
:
'rateLimits' => [
'mail' => [ // queue name
'allows' => 1, // 1 job
'every' => 5 // per 5 seconds
]
]
Make sure that you don't use sync
connection when queueing jobs. See default
property in config/queue.php
.
Run queue worker:
$ php artisan queue:work --queue default,mail
Then push several jobs to default
and mail
queues:
Mail::queue(..., 'mail');
Mail::queue(..., 'mail');
Mail::queue(..., 'mail');
Mail::queue(..., 'default');
Mail::queue(..., 'default');
You'll see that only mail
queue jobs will be rate limited while default
queue jobs will run normally.
Extend QueueServiceProvider
:
<?php
namespace App\Providers;
class QueueServiceProvider extends \MichaelLedin\LaravelQueueRateLimit\QueueServiceProvider
{
protected function registerLogger()
{
$this->app->singleton('queue.logger', function () {
return null;
});
}
}
Add it to providers
array in config/app.php
:
<?php
return [
// ...
'providers' => [
// Laravel Framework Service Providers
// ...
// Application Service Providers
// ...
App\Providers\QueueServiceProvider::class,
// ...
]
];
- mxl/laravel-api-key - API Key Authorization for Laravel with replay attack prevention;
- mxl/laravel-job - dispatch a job from command line and more;
See the LICENSE file for details.