Priority Queue implementation for your Laravel Applications
shipsaas/laravel-priority-queue is a Laravel package for priority queue implementation for your laravel applications.
It currently has 49 GitHub stars and 2.852 downloads on Packagist (latest version 1.1.0).
Install it with composer require shipsaas/laravel-priority-queue.
Discover more Laravel packages by shipsaas
or browse all Laravel packages to compare alternatives.
Last updated
A simple Priority Queue Driver for your Laravel Applications to serve your priority messages and makes users happy π.
With the famous Repository Pattern of Laravel, Priority Queue Driver is easily get injected into Laravel's Lifecycle without any hassle/hurdle.
We can use built-in artisan command php artisan queue:work π.

ORDER BY and INDEX for fast queue msgs pop process. Faster than any other stuff π₯.composer require shipsaas/laravel-priority-queue
Export and run the migration (one-time). We don't load migration by default just in case you want to customize the migration schema π.
php artisan vendor:publish --tag=priority-queue-migrations
php artisan migrate
Open config/queue.php and add this to the connections array:
'connections' => [
// ... a lot of connections above
// then our lovely guy here
'database-priority' => [
'driver' => 'database-priority',
'connection' => 'mysql',
'table' => 'priority_jobs',
'queue' => 'default',
'retry_after' => 90,
'after_commit' => false, // or true, depends on your need
],
],
It is recommended to use a different database connection (eg mysql_secondary) to avoid the worker processes ramming your
primary database.
The default job weight is 500.
You can define a hardcoded weight for your job by using the $jobWeight property.
class SendEmail implements ShouldQueue
{
public int $jobWeight = 500;
}
Or if you want to calculate the job weight on runtime, you can use the UseJobPrioritization trait:
use ShipSaasPriorityQueue\Traits\UseJobPrioritization;
class SendEmail implements ShouldQueue
{
use UseJobPrioritization;
public function getJobWeight() : int
{
return $this->user->isUsingProPlan()
? 1000
: 500;
}
}
You can use the normal Dispatcher or Queue Facade,... to dispatch the Queue Msgs
QUEUE_CONNECTION=database-priority
And you're ready to roll.
Specify the database-priority connection when dispatching a queue msg.
// use Dispatcher
SendEmail::dispatch($user, $emailContent)
->onConnection('database-priority');
// use Queue Facade
use Illuminate\Support\Facades\Queue;
Queue::connection('database-priority')
->push(new SendEmail($user, $emailContent));
I get that you guys might don't want to explicitly put the connection name. Alternatively, you can do this:
class SendEmail implements ShouldQueue
{
// first option
public $connection = 'database-priority';
public function __construct()
{
// second option
$this->onConnection('database-priority');
}
}
Nothing different from the Laravel Documentation π. Just need to include the database-priority driver.
php artisan queue:work database-priority
# Extra win, priority on topic
php artisan queue:work database-priority --queue=custom
Run composer test π
Available Tests:
queue:work commandFeel free to submit any PR, please follow PSR-1/PSR-12 coding conventions and unit test is a must.
If this package is helpful, please give it a βοΈβοΈβοΈ. Thank you!
MIT License