Laravel only allows you to retry one job per time or all of them when using the queue:retry
command. This package gives you a few more options so you retry failed jobs in batches filtering to only the jobs you want.
You can install the package via composer:
composer require kirschbaum-development/laravel-queue-batch-retry
There's two different commands this package provides.
php artisan queue:failed:batch-retry --failed-after="2 days ago" --queue="default" --limit=10 --filter="CrawlWebsiteJob" --filter-by-exception="ModelNotFoundException"
--filter
The failed_jobs
table is not really a structured table, so "searching" is basically a like
condition on the payload
condition. Using this option, depending on how many records you have, could be very slow since it will have to do a full table scan to find results. Hopefully, you don't have a lot of failed jobs, though.
php artisan queue:failed:batch-retry --filter="PublishDocumentJob"
php artisan queue:failed:batch-retry --filter="12234"
--exclude-filter
This is exact same as --filter, except in reverse. It will search all the payloads and exclude those given in the parameter.
php artisan queue:failed:batch-retry --exclude-filter="PublishDocumentJob"
--filter-by-exception
Same as the --filter
option, but for the exception
column in the failed_jobs
table. Using this option, depending on how many records you have, could be very slow since it will have to do a full table scan to find results.
php artisan queue:failed:batch-retry --filter-by-exception="ModelNotFoundException"
php artisan queue:failed:batch-retry --filter-by-exception="Error when creating directory"
--failed-after
This option filters failed_at
column. So let's say you had a bunch of jobs that failed today because of some API error in one of the services you use. You can retry all the jobs that failed since "today".
php artisan queue:failed:batch-retry --failed-after="today"
--failed-before
Same as the failed-after, but looking at previous dates.
php artisan queue:failed:batch-retry --failed-before="yesterday"
--limit
In case you want to run in just a specific number of jobs.
php artisan queue:failed:batch-retry --limit=10
--dry-run
We always get afraid of screwing things up, right? You can run dry run the command and see what's going to be executed first.
php artisan queue:failed:batch-retry --dry-run
In case you simply want to clean up your failed jobs table, there's also a queue:failed:batch-delete
command which works exactly the same as the queue:failed:batch-retry
command. You can use the same filters and options provided by the retry command.
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
If you discover any security related issues, please email luis@kirschbaumdevelopment.com or nathan@kirschbaumdevelopment.com instead of using the issue tracker.
Development of this package is sponsored by Kirschbaum Development Group, a developer driven company focused on problem solving, team building, and community. Learn more about us or join us!
The MIT License (MIT). Please see License File for more information.