From 50012c74a7526efd5c9ee6e6f5ce4714d7928489 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 28 Jun 2010 08:21:25 +0200 Subject: use net::presque and add some delegation --- lib/presque/worker.pm | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'lib/presque') diff --git a/lib/presque/worker.pm b/lib/presque/worker.pm index 5bf7a51..d3e9a0e 100644 --- a/lib/presque/worker.pm +++ b/lib/presque/worker.pm @@ -7,13 +7,15 @@ use JSON; use Try::Tiny; use Moose::Role; +use Net::Presque; + requires 'work'; with qw/ presque::worker::Role::Management presque::worker::Role::Dispatcher - presque::worker::Role::RESTClient presque::worker::Role::Job + presque::worker::Role::Context presque::worker::Role::Logger/; has queue_name => (is => 'ro', isa => 'Str', required => 1); @@ -35,6 +37,23 @@ has worker_id => ( $name; } ); +has rest_client => ( + is => 'rw', + isa => 'Net::Presque', + lazy => 1, + default => sub { + my $self = shift; + my $client = + Net::Presque->new(api_base_url => $self->context->{rest}->{url}); + $client; + }, + handles => { + pull => 'fetch_job', + retry_job => 'failed_job', + register_worker => 'register_worker', + unregister_worker => 'unregister_worker' + } +); after new => sub { my $self = shift; @@ -47,9 +66,10 @@ sub start { my $self = shift; while (!$self->shut_down) { - my $job = $self->rest_fetch_job(); + my $job = try { + $self->pull(queue_name => '', worker_id => $self->worker_id); + }; $job ? $self->work($job) : $self->idle(); - } } @@ -95,6 +115,10 @@ Worker must implement the B method. The only argument of this method is a Worker may implement the B method. This method have two arguments: the job description and the reason of the failure. +=head2 idle + +If no job, the worker execute the method B. By default, this method will sleep a number of seconds defined in the B attribute. + =head1 ATTRIBUTES =head2 queue_name -- cgit 1.4.1