@@ -56,6 +56,15 @@ It also supports the following additional features:
5656- Has built in support for ` setUp ` and ` tearDown ` methods, called pre and post
5757 jobs
5858
59+ Additionally it includes php-resque-scheduler, a PHP port of [ resque-scheduler] ( http://github.com/resque/resque ) ,
60+ which adds support for scheduling items in the future to Resque. It has been
61+ designed to be an almost direct-copy of the Ruby plugin
62+
63+ At the moment, php-resque-scheduler only supports delayed jobs, which is the
64+ ability to push a job to the queue and have it run at a certain timestamp, or
65+ in a number of seconds. Support for recurring jobs (similar to CRON) is planned
66+ for a future release.
67+
5968This port was originally made by [ Chris
6069Boulton] ( https://github.com/chrisboulton ) , with maintenance by the community.
6170See < https://github.com/chrisboulton/php-resque > for more on that history.
@@ -218,6 +227,43 @@ echo Resque_Job_PID::get($token);
218227
219228Function returns ` 0 ` if the ` perform ` hasn't started yet, or if it has already ended.
220229
230+ ## Delayed Jobs
231+
232+ To quote the documentation for the Ruby resque-scheduler:
233+
234+ > Delayed jobs are one-off jobs that you want to be put into a queue at some
235+ point in the future. The classic example is sending an email:
236+
237+ require 'Resque/Resque.php';
238+ require 'ResqueScheduler/ResqueScheduler.php';
239+
240+ $in = 3600;
241+ $args = array('id' => $user->id);
242+ ResqueScheduler::enqueueIn($in, 'email', 'SendFollowUpEmail', $args);
243+
244+ The above will store the job for 1 hour in the delayed queue, and then pull the
245+ job off and submit it to the ` email ` queue in Resque for processing as soon as
246+ a worker is available.
247+
248+ Instead of passing a relative time in seconds, you can also supply a timestamp
249+ as either a DateTime object or integer containing a UNIX timestamp to the
250+ ` enqueueAt ` method:
251+
252+ require 'Resque/Resque.php';
253+ require 'ResqueScheduler/ResqueScheduler.php';
254+
255+ $time = 1332067214;
256+ ResqueScheduler::enqueueAt($time, 'email', 'SendFollowUpEmail', $args);
257+
258+ $datetime = new DateTime('2012-03-18 13:21:49');
259+ ResqueScheduler::enqueueAt($datetime, 'email', 'SendFollowUpEmail', $args);
260+
261+ NOTE: resque-scheduler does not guarantee a job will fire at the time supplied.
262+ At the time supplied, resque-scheduler will take the job out of the delayed
263+ queue and push it to the appropriate queue in Resque. Your next available Resque
264+ worker will pick the job up. To keep processing as quick as possible, keep your
265+ queues as empty as possible.
266+
221267## Workers
222268
223269Workers work in the exact same way as the Ruby workers. For complete
@@ -355,6 +401,29 @@ functionality to PHP before 5.5, so if you'd like process titles updated,
355401install the PECL module as well. php-resque will automatically detect and use
356402it.
357403
404+ ### Resque Scheduler
405+
406+ resque-scheduler requires a special worker that runs in the background. This
407+ worker is responsible for pulling items off the schedule/delayed queue and adding
408+ them to the queue for resque. This means that for delayed or scheduled jobs to be
409+ executed, that worker needs to be running.
410+
411+ A basic "up-and-running" ` bin/resque-scheduler ` file that sets up a
412+ running worker environment is included (` vendor/bin/resque-scheduler ` when
413+ installed via composer). It accepts many of the same environment variables as
414+ the main workers for php-resque:
415+
416+ * ` REDIS_BACKEND ` - Redis server to connect to
417+ * ` LOGGING ` - Enable logging to STDOUT
418+ * ` VERBOSE ` - Enable verbose logging
419+ * ` VVERBOSE ` - Enable very verbose logging
420+ * ` INTERVAL ` - Sleep for this long before checking scheduled/delayed queues
421+ * ` APP_INCLUDE ` - Include this file when starting (to launch your app)
422+ * ` PIDFILE ` - Write the PID of the worker out to this file
423+
424+ It's easy to start the resque-scheduler worker using ` bin/resque-scheduler ` :
425+ $ php bin/resque-scheduler
426+
358427## Event/Hook System
359428
360429php-resque has a basic event system that can be used by your application to
@@ -462,6 +531,17 @@ passed (in this order) include:
462531- Queue - string containing the name of the queue the job was added to
463532- ID - string containing the new token of the enqueued job
464533
534+ ### afterSchedule
535+
536+ Called after a job has been added to the schedule. Arguments passed are the
537+ timestamp, queue of the job, the class name of the job, and the job's arguments.
538+
539+ ### beforeDelayedEnqueue
540+
541+ Called immediately after a job has been pulled off the delayed queue and right
542+ before the job is added to the queue in resque. Arguments passed are the queue
543+ of the job, the class name of the job, and the job's arguments.
544+
465545## Step-By-Step
466546
467547For a more in-depth look at what php-resque does under the hood (without needing
@@ -486,6 +566,7 @@ to directly examine the code), have a look at `HOWITWORKS.md`.
486566- @andrewjshults
487567- @atorres757
488568- @benjisg
569+ - @biinari
489570- @cballou
490571- @chaitanyakuber
491572- @charly22
@@ -511,6 +592,7 @@ to directly examine the code), have a look at `HOWITWORKS.md`.
511592- @patrickbajao
512593- @pedroarnal
513594- @ptrofimov
595+ - @rayward
514596- @richardkmiller
515597- @Rockstar04
516598- @ruudk
0 commit comments