@@ -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,29 @@ 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" ` 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
+
358
427
## Event/Hook System
359
428
360
429
php-resque has a basic event system that can be used by your application to
@@ -462,6 +531,17 @@ passed (in this order) include:
462
531
- Queue - string containing the name of the queue the job was added to
463
532
- ID - string containing the new token of the enqueued job
464
533
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
+
465
545
## Step-By-Step
466
546
467
547
For 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`.
486
566
- @andrewjshults
487
567
- @atorres757
488
568
- @benjisg
569
+ - @biinari
489
570
- @cballou
490
571
- @chaitanyakuber
491
572
- @charly22
@@ -511,6 +592,7 @@ to directly examine the code), have a look at `HOWITWORKS.md`.
511
592
- @patrickbajao
512
593
- @pedroarnal
513
594
- @ptrofimov
595
+ - @rayward
514
596
- @richardkmiller
515
597
- @Rockstar04
516
598
- @ruudk
0 commit comments