Laravel Job and Queue

To place job on the queue using tinker:

use Illuminate\Contracts\Bus\Dispatcher;
//for command
app(Dispatcher::class)->dispatch($command);
//for job
app(Dispatcher::class)->dispatch(new App\Jobs\TestJob);
//or
$pending = dispatch(new App\Jobs\TestJob) //must set to a var or it won't dispatch
//or
Queue::pushON('queueName', new App\Jobs\TestJob())

To run worker:

php artisan queue:work

To run worker just once:

php artisan queue:work --once

To restart worker after a code change:

php artisan queue:restart

To get a job to place in the failed queue, first, create a failed_jobs table:

php artisan queue:failed-table

php artisan migrate

After that, in the code, throw exception when you want the job to fail:

throw new \Exception("something terrible has happened");

The job will be placed in the failed queue after the worker has tried as many time as you specified. For example:

php artisan queue:work --tries=1

will invoke a worker that tries to execute the job once. If it failed, it will be placed on the fail queue to be tried later again.

To retry all the failed jobs

php artisan queue:retry all