@@ -56,6 +56,15 @@ It also supports the following additional features:
56
56
- Has built in support for ` setUp ` and ` tearDown ` methods, called pre and post
57
57
jobs
58
58
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
+
59
68
This port was originally made by [ Chris
60
69
Boulton] ( https://github.com/chrisboulton ) , with maintenance by the community.
61
70
See < https://github.com/chrisboulton/php-resque > for more on that history.
@@ -218,6 +227,43 @@ echo Resque_Job_PID::get($token);
218
227
219
228
Function returns ` 0 ` if the ` perform ` hasn't started yet, or if it has already ended.
220
229
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
+
221
267
## Workers
222
268
223
269
Workers work in the exact same way as the Ruby workers. For complete
@@ -355,6 +401,35 @@ functionality to PHP before 5.5, so if you'd like process titles updated,
355
401
install the PECL module as well. php-resque will automatically detect and use
356
402
it.
357
403
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" ` resque-scheduler.php ` file that sets up a
412
+ running worker environment is included (` vendor/resque-scheduler.php ` 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
+ The resque-scheduler worker requires resque to function. The demo
425
+ resque-scheduler.php worker allows you to supply a ` RESQUE_PHP ` environment
426
+ variable with the path to Resque.php. If not supplied and resque is not already
427
+ loaded, resque-scheduler will attempt to load it from your include path
428
+ (` require_once 'Resque/Resque.php';' ` )
429
+
430
+ It's easy to start the resque-scheduler worker using resque-scheduler.php:
431
+ $ RESQUE_PHP=./lib/Resque/Resque.php php resque-scheduler.php
432
+
358
433
## Event/Hook System
359
434
360
435
php-resque has a basic event system that can be used by your application to
@@ -462,6 +537,17 @@ passed (in this order) include:
462
537
- Queue - string containing the name of the queue the job was added to
463
538
- ID - string containing the new token of the enqueued job
464
539
540
+ ### afterSchedule
541
+
542
+ Called after a job has been added to the schedule. Arguments passed are the
543
+ timestamp, queue of the job, the class name of the job, and the job's arguments.
544
+
545
+ ### beforeDelayedEnqueue
546
+
547
+ Called immediately after a job has been pulled off the delayed queue and right
548
+ before the job is added to the queue in resque. Arguments passed are the queue
549
+ of the job, the class name of the job, and the job's arguments.
550
+
465
551
## Step-By-Step
466
552
467
553
For a more in-depth look at what php-resque does under the hood (without needing
@@ -486,6 +572,7 @@ to directly examine the code), have a look at `HOWITWORKS.md`.
486
572
- @andrewjshults
487
573
- @atorres757
488
574
- @benjisg
575
+ - @biinari
489
576
- @cballou
490
577
- @chaitanyakuber
491
578
- @charly22
@@ -511,6 +598,7 @@ to directly examine the code), have a look at `HOWITWORKS.md`.
511
598
- @patrickbajao
512
599
- @pedroarnal
513
600
- @ptrofimov
601
+ - @rayward
514
602
- @richardkmiller
515
603
- @Rockstar04
516
604
- @ruudk
0 commit comments