What is the difference queue:work and queue:listen

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 to queue:listen. You may use the php artisan help queue:work job to view all of the available options.

https://laravel.com/docs/5.1/queues#running-the-queue-listener

Tags:

Laravel