Laravel Queue Ensurer
This package provides a command (
queue:ensure-processes) to allow running the Laravel queue worker (
queue:work) from the Laravel schedule. This enables a cronjob to ensure that configured queue workers are running. It eliminates the need for a process manager like supervisord, which is not available in all production environments (like when working with DirectAdmin or most other server control panels).
Multiple queues can be configured and the number of desired processes can be configured per queue (which makes it possible to run multiple jobs in parallel). Doing so, allows having the queue configuration in your project's codebase.
This package doesn't care about which queue driver(s) you use and
queue:restart still works as normal.
composer require webparking/laravel-queue-ensurer
By default, the
queue:ensure-processes command is configured to run once a minute, ensuring one worker for the default queue. So if that's all you desire, you're good to go.
You can publish the configuration file to your project by running
php artisan vendor:publish --provider="Webparking\QueueEnsurer\ServiceProvider" --tag="config".
The documentation for the configurable options can be found in the config file.
The queue ensurer works by keeping a cache of process id's (PID's) it has started. Every time the ensurer runs, it does this:
- Remove any PID's of stopped processes from the cache.
These processes may have been stopped by a server reboot,
queue:restartor for any other reason.
- Kill processes belonging to no longer configured queue's and remove their PID's from the cache. When a queue was configured to have processes before, but is not configured now.
- Kill processes that are no longer required and remove their PID's from the cache. When the number of configured processes is lower than the number of running processes.
- Start new processes and add their PID's to the cache. When the number of configured processes is higher than the number of running processes.
This means that the ensurer will not take in account any processes it has not started itself.
For the PID cache, the ensurer uses a JSON file (
storage/app/queue-listener-pids.json) instead of the Laravel cache mechanism. If the queue ensurer were to use the Laravel cache and the cache were to be cleared (
php artisan cache:clear), the running processes would not be known to the ensurer any longer. Resulting in it starting new processes, without every killing the old ones.
Contribution and development
We're happy to receive pull requests or issues.
When developing, you can run
composer test to execute all code quality checks and tests.
These are features we may add. We don't have a specific need for them now, but we acknowledge their usefulness and we will add them when we have some down time. Should you or your project require one or more of these future features earlier, please submit a PR or create an issue.
- Testing compatibility with Lumen
Licence and Postcardware
This software is open source and licensed under the MIT license.
If you use this software in your daily development we would appreciate to receive a postcard of your hometown.
Please send it to: Webparking BV, Cypresbaan 31a, 2908 LT Capelle aan den IJssel, The Netherlands