NAME
TheSchwartz::Worker - superclass for defining task behavior
SYNOPSIS
package MyWorker;
use base qw( TheSchwartz::Worker );
sub work {
my $class = shift;
my TheSchwartz::Job $job = shift;
print "Workin' hard or hardly workin'? Hyuk!!\n";
$job->completed();
}
package main;
my $client = TheSchwartz->new( databases => $DATABASE_INFO );
$client->can_do('MyWorker');
$client->work();
DESCRIPTION
TheSchwartz::Worker objects are the salt of the reliable job queuing earth. The behavior required to perform posted jobs are defined in subclasses of TheSchwartz::Worker. These subclasses are named for the ability required of a TheSchwartz
client to do the job, so that the clients can dispatch automatically to the approprate worker routine.
Because jobs can be performed by any machine running code for capable worker classes, TheSchwartz::Worker
s are generally stateless. All mutable state is stored in the TheSchwartz::Job
objects. This means all TheSchwartz::Worker
methods are class methods, and TheSchwartz::Worker
classes are generally never instantiated.
SUBCLASSING
Define and customize how a job is performed by overriding these methods in your subclass:
$class->work( $job )
Performs the job that required ability $class
. Override this method to define how to do the job you're defining.
Note that will need to call $job->completed()
or $job->failed()
as appropriate to indicate success or failure. See TheSchwartz::Job.
$class->max_retries( $job )
Returns the number of times workers should attempt the given job. After this many tries, the job is marked as completed with errors (that is, a TheSchwartz::ExitStatus
is recorded for it) and removed from the queue. By default, returns 0.
$class->retry_delay( $num_failures )
Returns the number of seconds after a failure workers should wait until reattempting a job that has already failed $num_failures
times. By default, returns 0.
$class->keep_exit_status_for()
Returns the number of seconds to allow a TheSchwartz::ExitStatus
record for a job performed by this worker class to exist. By default, returns 0.
$class->grab_for()
Returns the number of seconds workers of this class will claim a grabbed a job. That is, returns the length of the timeout after which other workers will decide a worker that claimed a job has crashed or faulted without marking the job failed. Jobs that are marked as failed by a worker are also marked for immediate retry after a delay indicated by retry_delay()
.
USAGE
$class->grab_job( $client )
Finds and claims a job for workers with ability $class
, using TheSchwartz
client $client
. This job can then be passed to work()
or work_safely()
to perform it.
$class->work_safely( $job )
Performs the job associated with the worker's class name. If an error is thrown while doing the job, the job is appropriately marked as failed, unlike when calling work()
directly.