Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fire Laravel Queues with beanstalkd

I'm pretty new to the whole Queue'd jobs thing in Laravel 4. I have some process heavy tasks I need the site to run in the background after being fired by the user doing a particular action.

When I was doing the local development for my site I was using this:

Queue::push('JobClass', array('somedata' => $dataToBeSent));

And I was using the local "sync" driver to do it. (The jobs would just automatically fire, impacting on the user experience but I assumed when going into the production phase I could switch it to beanstalkd and they would then be run in the background)

Which brings me to where I'm at now. I have beanstalkd set up with the dependencies installed with composer and the beanstalkd process listening for new jobs. I installed a beanstalk admin interface and can see my jobs going into the queue, but I have no idea how to actually get them to run!

Any help would be apprieciated, thanks!

like image 414
Tyrone Avatar asked Jul 01 '13 14:07

Tyrone


1 Answers

This is actually a really badly documented feature in Laravel.

What you actually need to do is have the JobClass.php in a folder that is auto-loaded, I use app/commands, but they can also be in app/controllers or app/models if you like. And this function needs to have a fire event that takes the $job and $data argument.

To run these, simply execute php artisan queue:listen --timeout=60 in your terminal, and it will be busy emptying the queue, until it's empty, or it's been running for longer then 60 seconds. (Small note: The timeout is the time-limit to start a queue, so it may run for 69 seconds if 1 job takes 10 seconds.

If you only want to run 1 job (perfect for testing), run php artisan queue:work

There are tools like Supervisord that make sure your job handlers keep running, but I recommend to just make a Cron task that starts every X minutes based on how fast the data needs to be processed, and on how much data comes in.

like image 194
Nico Kaag Avatar answered Sep 30 '22 13:09

Nico Kaag