When jobs are dispatched and queued in Laravel, they are processed in the order that they were dispatched. I needed a way to process specific jobs before others, irrespective of order they were dispatched in. I couldn’t find a built-in or third-party solution for this so I wrote this package which introduces a middle layer between queueing and dispatching. Jobs are queued up by inserting them into a priority queue (stored in a database table). As queue workers become available, jobs are then dispatched in order of highest priority.
Here’s an example of how that looks like.
// Old way dispatch((new ConvertImage)->onQueue('images')); // New way (priority passed as second parameter) PriorityQueue::queue('images')->insert(new ConvertImage, 10);
A detailed explanation is found in the README of the repository. Visit the github repository here.