What is the difference queue:work and queue:listen
I can't understand what's the difference between Laravel queue:work
and Laravel queue:listen
I can see that:
- Queue: Listen to a given queue
- Work: Process the next job on a queue
But still don't get it, because I've tried both, both will run queue if there is any new queue ("work option" not just running once)
I'm not talking about the daemon option. Just these both.
Until Laravel 5.2
you had :listen
and :work
.
Work
would process the first job in the queue.
Listen
would process all jobs as they came through.
In Laravel 5.3
+ this is no longer the case. Listen
still exists, but it is deprecated and slated for removal in 5.5
. You should prefer :work
now.
Work
now process jobs one after the other, but have a plethora of options you can configure.
Edit
The above was true at the time of the posting, but since then things have been changed a bit.
queue:work
should be preferred when you want your queue's to run as a daemon
. This would be a long-lived process that would be beneficial where performance was an issue. This will use a cached version of the application and does not re-bootstrap the application every time a job is processed.
queue:listen
should be used when you don't care about performance or you don't want to have to restart the queue after making changes to the code.
- They'll both pop jobs off the queue 1-by-1 as received.
- They both share almost the exact same options that can be passed to them.
In Laravel 5.3+ queue:work runs a daemon listener. It could in 5.2 as well if you specified the --daemon
flag. A daemon work boots the framework one time and then processes jobs repeatedly. The queue:listen
command runs a queue:work --once
sub-process in a loop which boots the framework each iteration.
queue:work
should pretty much always be used in production as it's much more efficient and uses less RAM. However; you need to restart it after each core change. queue:listen
is useful for development and local environments because you don't have to restart it after code changes (because the framework is booting fresh each job).
from here
The
queue:work
Artisan command includes a--daemon
option for forcing the queue worker to continue processing jobs without ever re-booting the framework. This results in a significant reduction of CPU usage when compared to the queue:listen command:As you can see, the
queue:work
job supports most of the same options available toqueue:listen
. You may use the php artisan helpqueue:work
job to view all of the available options.
https://laravel.com/docs/5.1/queues#running-the-queue-listener